Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

membuat beberapa subgrup agregasi

Saya pikir pada dasarnya ide yang sama berlaku seperti pada pertanyaan sebelumnya. Anda ingin menghitung jumlah record yang dilakukan secara ketat sebelum record yang diberikan. Ini memberi Anda pengidentifikasi grup yang kemudian dapat digunakan untuk agregasi.

Di SQL Server 2012+, Anda akan menggunakan fungsionalitas penjumlahan kumulatif. Di versi sebelumnya, Anda dapat melakukan hal yang sama dengan subkueri yang berkorelasi atau penerapan luar.

Versi ini memodifikasi Anda di atas dalam beberapa cara. Secara khusus, ini menyederhanakan logika mendefinisikan grp . Saya tidak mudah melihat bagaimana row_number() cocok dengan kueri. Saya mengerti logikanya -- sebutkan tindakan yang dilakukan dan gunakan itu untuk agregasi. Namun, mendapatkan nilai tersebut pada semua baris dalam grup bukanlah hal yang sepele.

SELECT r.Key, a.CYCLE_BEGIN_DATE, a.CYCLE_END_DATE, a.NUM_ACTIONS_IN_CYCLE
FROM Records r LEFT OUTER JOIN
     (select a.key, a2.grp, min(Date) as CYCLE_BEGIN_DATE,
             max(case when Action = 'Done') then Date end) as CYCLE_END_DATE,
             count(*) as NUM_ACTIONS_IN_CYCLE
      from actions a outer apply
           (select count(*) as grp
            from actions a2
            where a2.key = a.key and a2.date < a.date and a2.action = 'Done'
           ) a2
     group by a.key, a2.grp
    ) a
    on r.key = a.key;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Melarikan diri dari kutipan tunggal di SQL Server

  2. Apa Nama Batasan Default di SQL Server?

  3. kolom ke baris di sql server?

  4. Periksa apakah tanggal jatuh di antara tanggal mulai baris sebelumnya dan tanggal akhir

  5. Menyimpan TimeSpan antara dua DateTimes