#tsql
Вопрос:
У меня есть таблица, содержащая поля:
cazi, cdip, date
1 2 13/03/2021
1 2 14/03/2021
1 2 15/03/2021
1 2 18/03/2021
1 2 19/03/2021
1 3 13/03/2021
1 3 14/03/2021
1 3 15/03/2021
1 3 20/03/2021
1 3 21/03/2021
Я не могу получить результат с помощью столбцов:
cazi, cdip, date1, date2, num_dd
1 2 13/03/2021 15/03/2021 3
1 2 18/03/2021 19/03/2021 2
1 3 13/03/2021 15/03/2021 3
1 3 20/03/2021 21/03/2021 2
Вы не могли бы мне помочь?
С помощью следующего кода я получаю минимальное и максимальное количество записей, но мне нужны последовательные записи:
WITH
dateGroup AS
(
SELECT DISTINCT
UniqueDate = [date]
,DateGroup = DATEADD(dd, - ROW_NUMBER() OVER (ORDER BY [date]), [date])
FROM malt
GROUP BY [date]
)
SELECT distinct
StartDate = MIN(UniqueDate)
,EndDate = MAX(UniqueDate)
,Days = DATEDIFF(dd,MIN(UniqueDate),MAX(UniqueDate)) 1
,cazi
,cdip
FROM dateGroup JOIN
malt u ON u.date = UniqueDate
GROUP BY
DateGroup
,cazi
,cdip
Комментарии:
1. Для начала было бы неплохо объяснить логику. Ваши попытки тоже были бы полезны.
2. лаурн я вставил код
3. Объяснение все еще необходимо «ноэторджану».
4. для каждой записи cazi, cdip, даты мне нужна запись: от / до, только если последовательно
Ответ №1:
Это традиционная проблема ПРОБЕЛОВ и ОСТРОВОВ. Вы можете попробовать выполнить приведенный ниже запрос, чтобы достичь желаемого результата —
SELECT cazi, cdip, MIN(T.[date]), MAX(T.[date])
FROM (SELECT M.*, ROW_NUMBER() OVER(PARTITION BY cdip ORDER BY [date]) RN
FROM malt M) T
GROUP BY cazi, cdip, DATEADD(DAY, - RN, [date]);
Комментарии:
1. большое спасибо, это работает!
2. Поздравление. Счастливого кодирования.