Łukasz
W.
Senior Oracle
Developer
Temat: zapytanie SELECT (przedziały dat)
Mam pytanie odnośnie zapytania SQL w bazie Oracle.Jest tabelka employees z danymi dotyczącymi zatrudniania i zwalniania pracowników firmy. Zawiera ona kolumny employee_id, data_od i data_do. Klucz główny jest na dwóch kolumnach: employee_id i data_od. Wartości employee_id nie są unikalne (pracownicy byli zwalniani i zatrudniani po kilka razy). Tabelka zawiera kilkadziesiąt milionów wierszy.
Przedziały dat wyglądają tak, że kolumny data_od i data_do dla danego wiersza są lewostronnie zamknięte, a prawostronnie otwarte. Data_od powinna być taka sama jak data_do z poprzedniego wiersza. Mówimy oczywiście o jednym pracowniku.
Jest jednak podejrzenie, że są miejsca, gdzie daty się nie stykają bądź tez nakładają się na siebie.
Zadanie jest takie, żeby napisać zapytanie SELECT, które sprawdzi czy istnieją takie "przerwy" między datami (daty się nie stykają) oraz drugie zapytanie SELECT, które sprawdzi czy istnieją takie rekordy, gdzie daty nakładają się na siebie, czyli, że data_od jest mniejsza od data_do z poprzedniego wiersza. Mowa jest oczywiście o zakresach dat dla jednego pracownika.
Ważną rzeczą jest również, aby zapytania były jak najbardziej optymalne pod kątem wydajności.
Podejrzewam, że trzeba zastosować jakąś funkcję analityczną, ewentualnie exists (ale chyba będzie ono mniej wydajne od funkcji? i nie wiem czy będzie się nadawało do tej sytuacji), ale może ktoś bardziej doświadczony podpowie jak to napisać?Ten post został edytowany przez Autora dnia 21.07.14 o godzinie 23:04