如何在sql中按不同的日期对数据进行分组?

时间:2015-03-10 02:02:55

标签: sql reportbuilder3.0 reportbuilder

如何在sql中按不同日期对数据进行分组?

例如,我希望将数据从1/2/2015分组到6/2/20157/2/201512/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

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