Przypuśćmy, że masz tabelę (o nazwie tableWithDate), która ma kolumnę z datą (dateToCheck). Ładujesz dane i zapisujesz dzień na które dane zostały załadowane. Na końcu ładowania danych powinieneś mieć wypełnioną tabelę z dla każdego dnia od 1 stycznia 2014. Chciałbyś sprawdzić dla jakich dni nie zostały załadowane dane.
Pomocne nam będą funkcje do operowania na dacie. Same zapytanie wygląda następująco:
WITH dates as (
SELECT TRUNC(to_date('1/1/2014','DD/MM/YYYY')) -1 + LEVEL AS d
FROM DUAL
CONNECT BY LEVEL <= 365
)
SELECT
d As "Date",
to_char(d, 'DDD') As "DayOfYear",
to_char(d, 'Day') as "DayOfWeek",
to_char(d, 'WW') As "WeekOfYear",
to_char(d, 'Month') As "MonthName",
to_char(d, 'RM') As "Roman" ,
to_char(d, 'Q') As "Quarter"
FROM dates d
where NOT EXISTS (
SELECT tab.dateToCheck
from tableWithDate tab
where to_char(d.d, 'YYYYMMDD') = to_char(tab.dateToCheck, 'YYYYMMDD')
group by tab.dateToCheck
)
ORDER BY d
;
Do wyświetlenia daty pomocna nam będzie funkcja to_char z formatowaniem.
Jeżeli nie będziemy mieli załadowanych danych to wynik zapytania będzie wyglądał następująco:
Jeżeli załadujemy dane i w śród tych danych nie będzie danych dla dni: 1-3 i 6 listopada, to tak będzie wyglądał wynik zapytania:

Brak komentarzy:
Prześlij komentarz