Я пытаюсь найти способ сравнить ряды данных, чтобы найти пробелы, однако мне нужно исключить диапазоны дат, которые полностью находятся в другом диапазоне. Некоторые примеры данных:Поиск пробелов в не последовательных диапазонах дат
PERSON_ID START_DATE END_DATE
0001 01/05/2014 30/11/2014
0001 01/06/2014 01/08/2014
0001 01/07/2014 01/11/2014
0001 01/12/2014 31/03/2015
Я знаю, что я могу использовать функцию LEAD для сравнения одной линии на другую, чтобы увидеть, где разрыв, если есть один, например:
SELECT END_DATE
FROM
(SELECT t.*,
lead(START_DATE,1) OVER (ORDER BY START_DATE) AS next_date
FROM table t
)
WHERE END_DATE+1<>next_date;
Этот вопрос что это вернет ложный результат. Второй и третий ряды диапазонов дат полностью содержатся в первом и поэтому не должны включаться в расчеты пробелов. Я знаю, что мне нужно внести поправки в аргумент offset в функции LEAD, но я не уверен в эффективном способе делать это для сотен человек. Есть предположения?
Привет, DrabJay, спасибо за предложение. Я внедрил ваш код как написанный, но он работает неправильно. У меня есть случай с 2 диапазонами, 31/03/14 - 15/08/14 и 15/08/14 - 31/03/15. Я ожидаю 31/03/14 - 31/03/15, но код не возвращает ничего для этого человека. Любая идея, что может быть неправильным? –
@ChizoEjindu У вас есть два диапазона от 31 марта 2014 года по 15 августа 2014 года и с 15 августа по 2014 год до 31 марта 2015 года. Эти перекрывающиеся диапазоны, согласно моему комментарию, будут объединены в один диапазон от 31 марта 2014 года по 31 марта 2015 года. Ваше требование было «найти пробелы». В этом одиночном диапазоне нет пробелов, и, следовательно, записи не возвращаются. – DrabJay
Ах да, я вижу вашу мысль, извиняюсь за мое непонимание! Теперь я понимаю, что это делает, я могу реализовать остальную часть кода вокруг него. Спасибо за вашу помощь! –