Oracle
 sql >> база данни >  >> RDS >> Oracle

Обединете две таблици и намерете припокриващи се дати и пропуски

Тази заявка използва аналитичен lead() върши работата. Колона note показва дали редът идва от вашите данни или липсва пропуск:

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)

Първоначално данните не се обръщат само за да има всички дати в една колона, по-лесно е за по-нататъшни анализи. Обединението премахва дублираните стойности. Колона dir информира дали това е from или to дата. След това lead логика се прилага в зависимост от вида на това направление. Мисля, че може да се опрости донякъде :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Оператор за конкатенация на низове в Oracle, Postgres и SQL Server

  2. Извикване на недефинирана функция oci_connect()

  3. операцията за манипулиране на данни не е законна за този изглед, случваща се в потребителска таблица

  4. Oracle - Как да принудите потребителя да ВМЪКНЕ няколко реда

  5. Обработка на нули при използване на Oracle XMLType