SQL Подсчет последовательных дней в строке - PullRequest
0 голосов
/ 04 августа 2020

Требуется получить «Общее количество последовательных дней» для каждой строки.

Таблица смены содержит ShiftId, ClientID, ServiceId и ProviderID. Таблица ShiftDetails содержит даты.

Может быть несколько смен с тот же ShiftId, ClientID, ServiceId Могут даже быть повторяющиеся даты.

Хотелось бы иметь несколько вычислений «Всего последовательных дней». Последовательных дней на ClientID Последовательные дни на ClientID и ServiceID Последовательные дни на ClientID, ServiceID и ProviderID.

SQL Fiddle

1 Ответ

1 голос
/ 04 августа 2020

Это проблема промежутков и островов. Вы можете идентифицировать острова, вычитая из даты последовательность целых чисел - постоянные различия определяют соседние даты. Затем используйте count(*) в качестве оконной функции:

select t.*,
       count(*) over (partition by clientid, serviceid, dateadd(day, -seqnum, date)) as consecutive_days
from (select t.*,
             row_number() over (partition by clientid, serviceid order by date) as seqnum
      from t
     ) t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...