Sql server 按值分组和计数行,直到下一行的差值超过指定值

Sql server 按值分组和计数行,直到下一行的差值超过指定值,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我试图生成的查询与之非常相似,但我需要计算差异超过特定值的点,而不是计算其变化的位置 我曾尝试设置一个标志,其中日期差异大于14,但随后会给出两条记录——一条用于差异大于14时,另一条用于其余记录。由于ID可能会在不同日期出现多次,因此我无法对结果进行分组 e、 g。 数据: 结果集为: ID Date Count 1A 2020-01-01 2 2B 2020-01-05 1 1A 2020-02-01 1 在这种情况下,标

我试图生成的查询与之非常相似,但我需要计算差异超过特定值的点,而不是计算其变化的位置

我曾尝试设置一个标志,其中日期差异大于14,但随后会给出两条记录——一条用于差异大于14时,另一条用于其余记录。由于ID可能会在不同日期出现多次,因此我无法对结果进行分组

e、 g。 数据:

结果集为:

ID      Date         Count
1A      2020-01-01   2
2B      2020-01-05   1
1A      2020-02-01   1
在这种情况下,标准是日期之间的差异超过14天

尝试:

SELECT [ID], [Date], 
case when datediff(dd,lag([Date]) over (partition by ID order by [Date]),[Date])>14
    then 1 else 0 end as CaseValue
FROM Table
where [Date]>'2020-02-01'


请添加您的尝试,这样我们就可以看到您取得了多大的进展。到目前为止您尝试了什么?对于这样的事情,您通常需要迭代,这是很慢的:/我也在考虑使用一个同样慢的游标:(rCTE至少比
游标快。
SELECT [ID], [Date], 
case when datediff(dd,lag([Date]) over (partition by ID order by [Date]),[Date])>14
    then 1 else 0 end as CaseValue
FROM Table
where [Date]>'2020-02-01'
declare @CountValue bigint

SELECT [ID], [Date], 
@CountValue=@CountValue+case when datediff(dd,lag([Date]) over (partition by ID order by [Date]),[Date])>14
    then 1 else 0 end
FROM Table
where [Date]>'2020-02-01'