【问题标题】:grouping data in SQL based on date manipulations基于日期操作在 SQL 中对数据进行分组
【发布时间】:2021-02-14 11:53:37
【问题描述】:

我这里有样本数据(日期:yyyy-mm-dd 格式)

Headquarter     date       Sales       monthyear
    1        2020-10-30    1000         202010
    1        2020-10-31    500          202010
    1        2020-11-01    1000         202011
    1        2020-11-02    2000         202011
    1        2020-11-03    3000         202011
    1        2020-11-04    1000         202011
    1        2020-11-05    1000         202011

我必须汇总从本月 2 日到下月 2 日的所有销售额。按总部和月份分组。因此,如果我根据 current_date() 运行查询,则应将销售额值分别添加到该月。

简要说明一下,这是想要的结果

headquarter    sales      monthyear
   1           4500        202010
   1           5000        202011

因此,10 月 30 日、10 月 31 日和 11 月 1 日、11 月 2 日属于我的情况,它们的值相加到 10 月。但是 11 月 3 日和 4 日的值相加到 11 月。同样,它每个月都会发生。 如果我运行 sql 查询,因为今天是 11 月 1 日(IST),今天的值应该添加到上个月。

我在这里寻求一些帮助来进行 SQL 查询。

【问题讨论】:

  • 我必须将当月 2 日的所有销售价值相加.. 包括在内? .. 到下个月 2 日 独家?
  • 完全正确。这就是我要找的。​​span>

标签: mysql sql


【解决方案1】:

MySQL 为extract() 提供了year_month 说明符。我假设您想要从一个月的二号到下个月的一号的所有内容。如果是这样,减去一天:

select headquarter,
       extract(year_month from date - interval 1 day) as yyyymm,
       sum(sales)
from sample
group by headquarter, yyyymm;

【讨论】:

  • 感谢您的评论。假设如果我今天运行查询(我当前的日期 11 月 2 日 IST),因为这属于 11 月 2 日到 12 月 2 日的条件。这应该添加到 11 月。如果我在 12 月 2 日运行此查询,它也属于相同的条件,它应该添加到 11 月。我们可以使用 current_date() 来做到这一点吗?有什么类似的吗?
  • @NikhilGarakapati 。 . .该问题描述了数据中的日期列,因此当前日期与它几乎没有关系。如果您想根据当前日期过滤,那将是一个不同的问题。可以使用类似的方法。如果您需要这方面的帮助,请提出新问题。
【解决方案2】:
GROUP BY DATE_FORMAT(`date` - INTERVAL 1 DAY, '%y%m')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2017-03-15
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多