1

我有一些看起来像这样的数据:

id     date
--------------------------------
123    2013-04-08 00:00:00.000
123    2013-04-07 00:00:00.000
123    2013-04-06 00:00:00.000
123    2013-04-04 00:00:00.000
123    2013-04-03 00:00:00.000

我需要返回给定 ID 的最近连续日期条纹的计数,在本例中3为 id 123。我不知道这是否可以在 SQL 中完成。有什么建议么?

4

1 回答 1

3

这样做的方法是减去一个数字序列并取其差。这是一系列日期的常数。这是一个获取 id 的所有序列长度的示例:

select id, grp, count(*) as NumInSequence, min(date), max(date)
from (select t.*,
             (date - row_number() over (partition by id order by date)) as grp
      from data t
     ) t
group by id, grp

为了获得最长的,我会row_number()再次使用:

select t.*
from (select id, grp, count(*) as NumInSequence,
             min(date) as mindate, max(date) as maxdate,
             row_number() over (partition by id order by count(*) desc) as seqnum
      from (select t.*,
                   (date - row_number() over (partition by id order by date)) as grp
            from data t
           ) t
      group by id, grp
     ) t
where seqnum = 1
于 2013-07-15T17:19:29.627 回答