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

Zapytanie Oracle sql do grupowania kolejnych rekordów według daty

Zakładając, że możemy po prostu użyć start_date aby zidentyfikować sąsiednie rekordy (tj. Nie ma przerw), możesz użyć podejścia polegającego na różnicy numerów wierszy:

select id, min(start_date) as mn_date, max(end_date) as mx_date, rate
from (select t.*,
             row_number() over (partition by id order by start_date) as seqnum_i,
             row_number() over (partition by id, rate order by start_date) as seqnum_ir
      from t
     ) t
group by id (seqnum_i - seqnum_ir), rate;

Aby zobaczyć, jak to działa, spójrz na wyniki podzapytania. Powinieneś być w stanie "zobaczyć", jak różnica dwóch numerów wierszy definiuje grupy sąsiednich rekordów z taką samą szybkoś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. Korzystanie z identyfikatorów generowanych przez Oracle GUID() w Grails/Hibernacja

  2. Zadeklaruj wyjątek zdefiniowany przez użytkownika przy użyciu metody RAISE_APPLICATION_ERROR w bazie danych Oracle

  3. Oracle SQL:zmienne używane zamiast nazw tabel

  4. Oracle 10g akceptuje 5-cyfrowy rok w Dacie

  5. porównywanie daty z predefiniowanym formatem pl sql