Запрос, который я пытаюсь создать, очень похож на this , но вместо того, чтобы считать, где он меняется, мне нужно посчитать до того момента, когда разница превысит указанное c значение.
Я попытался установить флаг, в котором разница дат больше 14 от предыдущей, но тогда получаются 2 записи - одна для случая, когда разница больше 14, и 1 для остальных. Поскольку идентификатор может появляться несколько раз с разными датами, я не могу затем сгруппировать этот результат.
например, Данные:
ID Date
1A 2020-01-01
1A 2020-01-03
2B 2020-01-05
1A 2020-02-01
Результат установлен в:
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'
и
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'