У меня было бизнес-требование, в котором мне нужно преобразовать даты списка в диапазон дат. Логическое c будет заключаться в создании диапазона дат до непрерывной даты, если дата не является непрерывной, то будет создан новый диапазон
Ниже приведен пример таблицы
ID Module Employeeid Date
--------------------------------------------
11 M1 9 2019-10-01 00:00:00.000
12 M1 9 2019-10-02 00:00:00.000
13 M1 9 2019-10-03 00:00:00.000
14 M2 9 2019-10-04 00:00:00.000
15 M2 9 2019-10-05 00:00:00.000
16 M2 9 2019-10-08 00:00:00.000
17 M2 9 2019-10-09 00:00:00.000
Требуемый вывод
Module Employeeid Start Date End Date
---------------------------------------------------
M1 9 2019-10-01 2019-10-03
M1 9 2019-10-04 2019-10-05
M1 9 2019-10-08 2019-10-09
Ниже приведен запрос, который я пробовал, и он работает, но нам нужно добавить фильтр даты и даты, чтобы после добавлен фильтр OutPut неправильно
WITH mycte
AS (SELECT *,
Dateadd(day, -Row_number()
OVER (
partition BY [[module]
ORDER BY [Date]), [Date]) AS grp
FROM [to_shiftschedule]
WHERE employeeid = 535
)
SELECT Min([Date]) AS[StartDate],
Max([Date]) AS[EndDate],
[employeeid],
[module]
FROM mycte
where CONVERT(VARCHAR, Date, 103) >= CONVERT(VARCHAR, '09/01/2020', 103)
AND CONVERT(VARCHAR, Date, 103) <= CONVERT(VARCHAR, '23/01/2020', 103)
GROUP BY[employeeid], [module], grp
ORDER BY[startdate] DESC;