Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Połącz dwie tabele i znajdź nakładające się daty i luki

To zapytanie przy użyciu analitycznego lead() wykonuje pracę. Kolumna note pokazuje, czy wiersz pochodzi z Twoich danych, czy brakuje w nim luki:

select id, d1, d2, case dir when 3 then 'GAP' end note 
  from (
    select id, 
           case when dir = 2 
                 and lead(dir) over (partition by id order by dt) = 1
                 and lead(dt) over (partition by id order by dt) <> dt + 1
                then dt + 1 
                else dt
           end d1,
           case when dir = 2 
                 and lead(dir) over (partition by id order by dt) = 1
                 and lead(dt) over (partition by id order by dt) <> dt + 1
                then 3 
                else dir
           end dir,
           case when lead(dir) over (partition by id order by dt) = 1 
                then lead(dt)  over (partition by id order by dt) - 1
                else lead(dt)  over (partition by id order by dt) 
            end d2
      from (
        select * from a unpivot (dt for dir in (validfrom as 1, validto as 2)) union 
        select * from b unpivot (dt for dir in (validfrom as 1, validto as 2)) ) )
  where dir in (1, 3)

Na początku dane są nieobrotowe, aby mieć wszystkie daty w jednej kolumnie, co ułatwia dalszą analizę. Unia usuwa zduplikowane wartości. Kolumna dir informuje, czy to jest from lub to data. Następnie lead logika jest stosowana w zależności od rodzaju tego kierunku. Myślę, że można to nieco uprościć :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak określić limit czasu @lock w wiosennym zapytaniu jpa?

  2. Oracle:Jak przekonwertować szesnastkowy na dziesiętny w Oracle SQL?

  3. Jak wygenerować wszystkie daty niedzieli między 2 datami w Oracle sql?

  4. Parametryzacja nazwy tabeli w pliku wejściowym sqlplus

  5. Spring ReadOnly Transaction z Propagation.SUPPORTS z WebSphere i Oracle