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

Jumlah parsial antara catatan yang berbeda menggunakan SQL 2008

Ini adalah masalah kesenjangan dan pulau, di mana setiap pulau diakhiri dengan catatan "dalam", dan Anda ingin menjumlahkan nilai di setiap pulau.

Berikut adalah satu pendekatan yang menggunakan hitungan "masuk" berikut untuk menentukan grup, dan kemudian jumlah jendela untuk setiap grup.

select timestamp,
    case when val = 'out' 
        then val
        else sum(val) over(partition by grp order by timestamp)
    end as val,
    typerow
from (
    select t.*,
        sum(case when typerow = 'in' then 1 else 0 end) over(order by timestamp desc) grp
    from @table t
) t
order by timestamp

Demo di DB Fiddle :

timestamp               | val | typerow
:---------------------- | --: | :------
2018-06-03 13:30:00.000 |   6 | out    
2018-06-03 14:10:00.000 |   8 | out    
2018-06-03 14:30:00.000 |  17 | in     
2018-06-03 15:00:00.000 |   9 | out    
2018-06-03 15:30:00.000 |   4 | out    
2018-06-03 16:00:00.000 |   2 | out    
2018-06-03 17:05:00.000 |  23 | in     
2018-06-03 17:30:00.000 |   0 | out    
2018-06-03 18:15:00.000 |   7 | out    
2018-06-03 18:30:00.000 |   8 | in     
2018-06-03 19:00:00.000 |   5 | out    



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengubah string datetime tanpa pembatas di SQL Server sebagai datetime?

  2. Batasan hanya untuk satu catatan yang ditandai sebagai default

  3. 5 Manfaat Pemantauan Kinerja Basis Data Proaktif

  4. SQL Server, tidak dapat memasukkan nol ke bidang kunci utama?

  5. Fungsi agregat khusus (concat) di SQL Server