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

Jak grupować kolejne wiersze w SQL według wielu kolumn?

To jest problem luk i wysp. Jedna metoda rozwiązania tego problemu wykorzystuje row_number() :

select Date, User, min(Time) as start_time, max(time) as end_time,
       Location,
       listagg(Service, ',') within group (order by service),     
       count(*) as cnt
from (select t.*,
             row_number() over (date order by time) as seqnum,
             row_number() over (partition by user, date, location order by time) as seqnum_2
      from t
     ) t
group by Date, User, Location, (seqnum - seqnum_2);

Trochę trudno jest wyjaśnić, jak to działa. Proponuję uruchomić podzapytanie, a zobaczysz, jak różnica numerów wierszy definiuje grupy, których szukasz.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PLS-00201:należy zadeklarować identyfikator UTIL_FILE

  2. Najczęstsze zapytania i podział na strony w Oracle

  3. Znajdowanie sampli i dem dla konkretnej wersji JDK

  4. Proces PL/SQL:problem ze sformułowaniami

  5. Oracle, PDO_OCI a OCI8