Как найти дни с пропуском данных в таблице?
Существует таблица, в которой каждый день автоматически записываются данные.
Таблица содержит столбец INSERT_DATE с типом DATE:
SELECT * FROM PERSON A
ORDER BY INSERT_DATE DESC
В один день произошла ошибка, в связи с которой, в таблицу не записывались данные. Необходимо выяснить, в какой день это произошло, т.е. хочу найти все пропущенные дни с 1/22/2021 до сегодняшнего дня.
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Допустим, есть такие данные:
create table tab (inserted) as
select date'2021-01-01'+(rownum-1+0.5)
from dual connect by level<=31
/
delete from tab where trunc (inserted) in (date'2021-01-06', date'2021-01-28')
/
2 rows deleted.
То есть, за январь два дня были ошибки.
Простое решение, составить последовательность дней за данный период, и проверять - были ли записи за каждый день в последовательности. Попробуйте такой запрос:
with dayseq (day) as (
select daystart+level from (
select min (trunc (inserted)) daystart, max (trunc (inserted)) dayend
from tab) connect by daystart+level < dayend
)
select day daywithoutrecords
from dayseq seq
where not exists (
select 1
from tab
where trunc (tab.inserted) = seq.day
)
order by 1
/
DAYWITHOUTRECORDS
-------------------
2021-01-06 00:00:00
2021-01-28 00:00:00