如何在sql中按不同日期对数据进行分组?
例如,我希望将数据从1/2/2015
分组到6/2/2015
,7/2/2015
到12/2/2015
等。到目前为止,我只能根据1个日期对数据进行分组使用WHERE条件的范围。
SELECT type, count(*)
from table1
WHERE Day(datefield) <=6
Group by type
table1:
type,datefield
typeA,'2015-2-1'
typeB,'2015-2-2'
typeB,'2015-2-9'
typeA,'2015-2-18'
typeB,'2015-2-28'
期望的结果:
类型,没有。第1-6天,没有。第7-12天,没有。第13-18天,没有。对于第19-24天,没有。第25-31天
输入A,1,0,1,0,0
键入B,1,1,0,0,1
答案 0 :(得分:0)
首先创建一个派生表,其中每个日期字段由标签替换(&#39; 1-6&#39;,&#39; 7-12&#39;等)。
然后按该标签和类型对该表进行分组并获取计数。最后将标签旋转到列中
使用条件聚合(max(case when ...
)。
select type,
max(case when date_label = '1-6' then date_count end) '1-6',
max(case when date_label = '7-12' then date_count end) '7-12',
max(case when date_label = '13-18' then date_count end) '13-18',
max(case when date_label = '19-24' then date_count end) '19-24',
max(case when date_label = '25-31' then date_count end) '25-31',
from (
select
type,
date_label,
count(*) date_count
from
(select type,
case when day(datefield) <=6 then '1-6'
when day(datefield) <= 12 then '7-12'
when day(datefield) <= 18 then '13-18'
when day(datefield) <= 24 then '19-24'
when day(datefield) <= 31 then '25-31'
else 'n/a' end as date_label
from table1) t1
group by type, date_label
) t1 group by type