У меня проблемы с непрерывными временными интервалами. У меня есть следующие данные в таблице.
ID startDate endDate
------- ----------- ------------
5549 2008-05-01 4712-12-31
5567 2008-04-17 2008-04-30 1
5567 2008-05-01 2008-07-31 1
5567 2008-09-01 4712-12-31 2
5569 2008-01-01 2008-08-31
5569 2008-09-01 2008-09-20
5569 2008-11-01 4712-12-31
5589 2008-04-18 2008-04-30
5589 2008-05-01 4712-12-31
5667 2008-05-01 2008-05-31
5667 2008-06-01 2008-07-31
5667 2008-08-01 2008-09-30
5667 2008-09-30 2008-12-31
5828 2008-06-03 4712-12-31
5867 2008-06-03 4712-12-31
6167 2008-11-01 4712-12-31
В заданный период времени приведенные ниже идентификаторы не имеют непрерывных интервалов времени, я хочу исключить их. Я хочу исключить идентификатор (5567,5569), где нет непрерывных интервалов времени. Результаты должны быть такими, как показано ниже:
ID START_DATE END_DATE
------- ----------- -----------
5549 2008-05-01 4712-12-31
5589 2008-04-18 4712-12-31
5667 2008-05-01 2008-12-31
5828 2008-06-03 4712-12-31
5867 2008-06-03 4712-12-31
6167 2008-11-01 4712-12-31
Может ли кто-нибудь помочь этому сценарию?
Прямо сейчас я использую ниже SQL для непрерывных результатов интервала времени
SELECT id, min (start_date) period_start, max (end_date) period_end
FROM (SELECT id,
start_date,
end_date,
max (contig) OVER (PARTITION BY id ORDER BY end_date)
contiguous_group
FROM (SELECT id,
start_date,
end_date,
CASE
WHEN lag (end_date)
OVER (PARTITION BY id ORDER BY end_date) !=
start_date - 1
OR row_number ()
OVER (PARTITION BY id ORDER BY end_date) =
1 THEN
row_number ()
OVER (PARTITION BY id ORDER BY end_date)
ELSE
NULL
END
contig
FROM t2))
GROUP BY id, contiguous_group
ORDER BY id, period_start