Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Rangkaian baris Oracle SQL berdasarkan titik

Ini adalah jenis masalah kesenjangan-dan-pulau. Anda dapat menggunakan lag() dan kemudian jumlah kumulatif:

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;

EDIT:

Jika nilai disimpan sebagai string, gunakan:

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. Oracle CLOB tidak dapat memasukkan lebih dari 4000 karakter?

  2. Bagaimana saya bisa mengatur ulang semua urutan di Oracle DB saya ke nilai 0?

  3. Apakah blok bersarang memiliki dampak kinerja dalam prosedur PL/SQL?

  4. Menggunakan Dapper dengan Oracle

  5. ODP.Net - OracleDataReader.Baca sangat lambat