Группировка по разнице дат в SQL - PullRequest
0 голосов
/ 12 сентября 2018

Я использую SQL Server 2012 и, похоже, не могу понять, как заполнить столбец «эпизод» последовательностью чисел с шагом 1 только там, где даты («start_date», «end_date») разница больше 30 дней.

Любая помощь будет оценена.

sample

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете использовать lag() и накопленную сумму.Но вы уже сделали lag(), поэтому:

select t.*,
       sum(case when date_delta > 30 then 1 else 0 end) over (partition by id order by start_date) + 1 as episode
from t;

Если вам нужно рассчитать также date_delta:

select t.*,
       sum(case when start_date > dateadd(day, 30, prev_date)
                then 1 else 0
           end) over (partition by id order by start_date) + 1 as episode
from (select t.*,
             lag(start_date) over (partition by id order by start_date) as prev_date
      from t
     ) t;
...