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

Cara membuat GROUP BY pada tanggal min dan maks

Ini adalah jenis masalah kesenjangan-dan-pulau dengan rantai tanggal. Saya akan menyarankan menggunakan left join untuk menemukan di mana pulau-pulau itu bermula. Kemudian jumlah kumulatif dan agregasi:

select emp_id, title, min(start_date), max(end_date)
from (select t.*,
             sum(case when tprev.emp_id is null then 1 else 0 end) over
                 (partition by t.emp_id, t.title order by t.start_date) as grouping
      from t left join
           t tprev
           on t.emp_id = tprev.emp_id and
              t.title = tprev.title and
              t.start_date = tprev.end_date + 1
     ) t
group by grouping, emp_id, title;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat Paket PL/SQL Di Database Oracle

  2. Dari Stored Procedure, kembalikan parameter OUT &kursor OUT &hasil parse (Oracle)

  3. Oracle DB - Tetapkan Nomor Input ke panjang yang tepat

  4. Apakah Ada Mesin Basis Data yang Memungkinkan Batasan Bidang Kueri yang Ditentukan oleh RegEx?

  5. Bagaimana cara mengubah urutan karakter menjadi format tanggal untuk disimpan dalam database?