Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 确定SQL Server中的连续日期计数_Sql Server - Fatal编程技术网

Sql server 确定SQL Server中的连续日期计数

Sql server 确定SQL Server中的连续日期计数,sql-server,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的最近连续日期条纹计数,在本例中,对于ID123,该计数

我有一些数据如下所示:

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的最近连续日期条纹计数,在本例中,对于ID
123
,该计数为
3
。我不知道这是否可以在SQL中完成。有什么建议吗?

方法是将一系列数字相减,然后取差。这是一个日期序列的常数。以下是获取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
要获得最长的一个,我将再次使用
行编号()

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