它可能已经被回答过了,但是显然我没有正确搜索它。
假设我有一张桌子:
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
我该怎么做?
答案 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);