2013-07-15 30 views
1

我有一些數據,看起來像這樣:確定連續日數在SQL Server

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,代碼爲123。我不知道這是否可以在SQL中完成。有什麼建議麼?

回答

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