Đâ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 giantimestamp | 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