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

Fungsi Oracle Analytic - mengatur ulang klausa windowing

Ini sedikit rumit. Alih-alih menggunakan rank() atau sejenisnya, gunakan lag() untuk melihat ketika sesuatu berubah. Kemudian lakukan penjumlahan kumulatif dari flag.

select dept, date1,
       CASE WHEN StartFlag = 0 THEN 1
            ELSE 1+StartFlag+NVL(lag(StartFlag) over (order by date1),0)
       END as rnk
from (select t1.*,
             (case when dept = lag(dept) over (order by date1)
                   then 1
                   else 0
              end) as StartFlag
      from t1
     ) t1
order by date1;

Ini SQLFiddlenya.

EDIT:

Ini adalah Gordon yang mengedit jawaban saya sendiri. Ups. Permintaan asli adalah 90% dari perjalanan ke sana. Ini mengidentifikasi grup di mana jumlahnya harus bertambah, tetapi tidak menetapkan nomor dalam kelompok. Saya akan melakukan ini dengan level lain row_number() seperti di:

select dept, date1,
       row_number() over (partition by dept, grp order by date1) as rnk
from (select dept, date1, startflag,
             sum(StartFlag) over (partition by dept order by date1) as grp
      from (select t1.*,
                   (case when dept = lag(dept) over (order by date1)
                         then 0
                         else 1
                    end) as StartFlag
            from t1
           ) t1
     ) t1
order by date1;

Jadi, ide keseluruhannya adalah sebagai berikut. Pertama gunakan lag() untuk menentukan di mana grup dimulai (yaitu, di mana ada perubahan departemen dari satu tanggal ke tanggal berikutnya). Kemudian, tetapkan "id grup" untuk ini, dengan melakukan penjumlahan kumulatif. Ini adalah catatan yang akan dihitung. Langkah terakhir adalah menghitungnya menggunakan row_number() .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NCHR() Fungsi di Oracle

  2. Bidang Boolean di Oracle

  3. Metode Pengumpulan:Fungsi COUNT Dalam Database Oracle

  4. Pengguna Umum Dengan hak istimewa SYSBACKUP

  5. Cara Membuat Prosedur Di Dalam Paket di Oracle