SQL:如何连续按日期分组?

时间:2019-08-12 19:55:29

标签: sql sql-server group-by

它可能已经被回答过了,但是显然我没有正确搜索它。

假设我有一张桌子:

RecordingDate
2018-07-01
2018-07-02
2018-07-06
2018-07-09
2018-07-10
2018-07-11
2018-07-12
2018-07-16
2018-07-17
2018-07-18

我想按首次记录的日期对数据进行分组,并与记录连续计数天数:

DateOfFirstRecording  RecordingsInARow
2018-07-01            2
2018-07-06            1
2018-07-09            4
2018-07-16            3

我该怎么做?

1 个答案:

答案 0 :(得分:4)

您可以减去一个递增的序列,以获得一个恒定的日期。这是主意:

select min(date), max(date), count(*)
from (select t.*, row_number() over (order by date) as seqnum
      from t
     ) t
group by date - seqnum * interval '1 day'
order by min(date);

日期操作因数据库而异,但是所有数据库都通过某些语法支持此功能。

编辑:

在SQL Server中,它看起来像:

select 
    min(RecordingDate) as DateOfFirstRecording, 
    count(*) as RecordingsInARow
from (select Recordings.*, row_number() over (order by RecordingDate) as seqnum
      from Recordings
     ) t
group by dateadd(day, - seqnum, RecordingDate)
order by min(RecordingDate);
相关问题