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

Trượt các bản ghi nhất định đến cuối lần chạy cùng ngày

Điều này thật phức tạp. Trước tiên, bạn phải tìm các bản ghi ngày tháng liên tiếp, vì vậy với

thedate     theid  thetype
2014-07-12   5001       59
2014-07-12   5002      101
2014-07-12   5003       88
2014-07-13   5004       10
2014-07-12   5005       60

bạn sẽ xác định 2014-07-12 là một lần xuất hiện cho ba bản ghi đầu tiên và một lần khác cho bản ghi cuối cùng. Bản ghi thứ hai sẽ phải có được vị trí số 3 trong kết quả của bạn, không phải vị trí số 5. ​​

Bạn đạt được điều này bằng cách cấp cho các bản ghi liên tiếp một khóa nhóm bằng cách sử dụng LAG đầu tiên để xem xét bản ghi trước đó, do đó tạo cờ khi thay đổi nhóm và sau đó tích lũy các cờ này.

select thedate, theid, thetype
from
(
  select 
    thedate, theid, thetype,
    sum(new_group) over (order by theid) as group_key
  from
  (
    select
      thedate, theid, thetype,
      case when lag(thedate) over (order by theid) = thedate then 0 else 1 as new_group
    from mytable
  ) marked
) grouped
order by 
  group_key,
  case when thetype = 101 then 1 else 0 end,
  theid;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể tạo kết nối ban đầu của các sự cố nhóm trong Grails

  2. Thu hồi các đặc quyền trong Oracle

  3. 7 cách để kiểm tra phiên bản Oracle của bạn

  4. Cách thay đổi bảng trong Oracle

  5. Cách thiết lập Kiểm toán Oracle EBS