Группировка и подсчет строк по значению до следующей строки отличается более чем на указанное значение - PullRequest
0 голосов
/ 28 февраля 2020

Запрос, который я пытаюсь создать, очень похож на 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'
...