Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tổng một phần giữa các bản ghi khác nhau bằng cách sử dụng SQL 2008

Đây là một vấn đề về khoảng cách và các đảo, trong đó mỗi đảo kết thúc bằng một bản ghi "in" và bạn muốn tính tổng các giá trị trong mỗi đảo.

Đây là một cách tiếp cận sử dụng số lượng "trong" sau để xác định nhóm và sau đó là tổng cửa sổ trên mỗi nhóm.

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

Bản trình diễn trên DB Fiddle :

dấu thời gian
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. Thủ tục lưu trữ cuộc gọi SQL cho mỗi hàng mà không cần sử dụng con trỏ

  2. Bảo mật IIS7, SQL 2008 và ASP.NET MVC

  3. Kết hợp LIKE với IN trong SQL

  4. Cách xác định những gì đang biên dịch trong SQL Server

  5. có thể chọn EXISTS trực tiếp như một chút không?