【问题标题】:SQL: Group by for last 3 months and last 5 months respectivelySQL:分别按过去 3 个月和过去 5 个月分组
【发布时间】:2019-02-27 02:22:58
【问题描述】:

根据不同时间段的销售额表,我正在尝试计算 2 个不同时间段的汇总值:(1) 日期 > '2018-11-26' 的销售额和 (2) 日期 > 的销售额'2018-09-26'

create table revenue (sales float, date_time datetime) 
insert into revenue (sales,date_time) values (300, '2018-09-01')
insert into revenue (sales,date_time) values (200, '2018-10-01')
insert into revenue (sales,date_time) values (300, '2018-11-01')
insert into revenue (sales,date_time) values (400, '2019-01-01')
insert into revenue (sales,date_time) values (500, '2019-02-01')

我见过其他解决方案使用 case when 作为时间段,但这种情况下的不同之处在于时间段不是互斥的。

我想要的查询应该是这样的:

select sum(sales) from revenue
group by date_time where date_time > '2018-11-26',  
date_time where date_time > '2018-09-26'

【问题讨论】:

  • 那是新东西:)

标签: mysql sql


【解决方案1】:

你可以使用联合所有

select 'p1' as prd , sum(sales) from revenue
where date_time >= '2018-11-26'

union all
select 'p2', sum(sales) from revenue
where date_time > '2018-09-26' 

或者你可以使用case when

select case when date_time >= '2018-11-26' then 'p1'
              when date_time > '2018-09-26' 
              then 'p2' end as period, sum(sales) from revenue
              group by case when date_time >= '2018-11-26' then 'p1'
              when date_time > '2018-09-26' 
              then 'p2' end

【讨论】:

  • 第一个解决方案适用于 date_time 不应介于 '2018-09-26' 和 '2018-11-26' 之间。它应该只是 2 个不同的组,其中一个显示过去 3 个月的总和,另一个显示过去 5 个月的总和。
  • @MathiasRa 有帮助吗?
  • @MathiasRa 我已经编辑了条件,希望现在两者都能正常工作,如果它有助于将其标记为已接受
猜你喜欢
  • 1970-01-01
  • 2021-12-28
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多