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

Nối hàng Oracle SQL theo dấu chấm

Đây là một dạng vấn đề về khoảng trống và đảo. Bạn có thể sử dụng lag() và sau đó là tổng tích lũy:

select id, min(laufd), max(nextdt),
       row_number() over (partition by id order by min(laufd)) as period
from (select t.*,
             sum(case when prev_nextdt >= laufd - interval '2' day then 0 else 1 end) over
                 (partition by id order by order_row) as grp
      from (select t.*,
                   lag(nextdt) over (partition by id order by order_row) as prev_nextdt
            from t
           ) t
     ) t
group by grp, id;

CHỈNH SỬA:

Nếu các giá trị được lưu trữ dưới dạng chuỗi, thì hãy sử dụng:

select id, min(laufd), max(nextdt),
       row_number() over (partition by id order by min(laufd)) as period
from (select t.*,
             sum(case when prev_nextdt >= laufd - interval '2' day then 0 else 1 end) over
                 (partition by id order by order_row) as grp
      from (select t.id, t.order_row, -- any other columns you need
                   to_date(laufd, 'YYYYMMDD') as laufd,
                   to_date(nextdt, 'YYYYMMDD') as next_dt,
                   lag(to_date(nextdt, 'YYYYMMDD')) over (partition by id order by order_row) as prev_nextdt
            from t
           ) t
     ) t
group by grp, id;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ngày trở lại không có giờ và phút nào được trả lại

  2. Cách xuất một lượng lớn dữ liệu bằng cách sử dụng sql Developer - Oracle

  3. Truy vấn Oracle để biết chi tiết lỗi mã ORA

  4. Dữ liệu từ oracle trong utf-8 với php

  5. Kết nối Oracle với PostgreSQL