Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách nhóm các hàng liên tiếp với nhau trong SQL theo nhiều cột

Đây là một vấn đề khoảng trống và đảo. Một phương pháp để giải nó sử dụng 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);

Nó là một chút khó khăn để giải thích cách này hoạt động. Đề xuất của tôi là chạy truy vấn con và bạn sẽ thấy sự khác biệt của số hàng xác định các nhóm mà bạn đang tìm kiếm như thế nào.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Javascript Sắp xếp một mảng giống như thứ tự trong Oracle

  2. Làm việc với đối tượng BLOB trong Oracle

  3. Oracle chuyển đổi hàng thành cột

  4. ORA-01618

  5. Làm thế nào để Chọn một chuỗi con trong Oracle SQL cho đến một ký tự cụ thể?