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

Как да групирате последователни редове заедно в SQL по множество колони

Това е проблем с пропуски и острови. Един метод за решаването му използва 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);

Малко е трудно да се обясни как работи това. Моето предложение е да изпълните подзаявката и ще видите как разликата в номерата на редовете определя групите, които търсите.



  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 SQL несъответствие:COUNT(*) спрямо действителен набор от резултати

  2. Как най-добре да управлявате исторически стойности за търсене в база данни?

  3. Как да конфигурирам allocationSize в persistence.xml вместо Entity

  4. ORA-01653:не може да се разшири таблицата в пространството за таблици ORA-06512

  5. Разширението Centos 6 PHP OCI8 не работи (Недефинирана функция oci_connect())