これは、各島が "in" レコードで終わるギャップと島の問題であり、各島の値を合計したいと考えています。
次の「in」の数を使用してグループを定義し、各グループのウィンドウ合計を使用するアプローチの 1 つを次に示します。
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
プレ>タイムスタンプ |値 | typerow:---------------------- | --:| :-----2018-06-03 13:30:00.000 | 6 |アウト 2018-06-03 14:10:00.000 | 8 |アウト 2018-06-03 14:30:00.000 | 17 | 2018-06-03 15:00:00.000 | 9 |アウト 2018-06-03 15:30:00.000 | 4 |アウト 2018-06-03 16:00:00.000 | 2 |アウト 2018-06-03 17:05:00.000 | 23 | 2018-06-03 17:30:00.000 | 0 |アウト 2018-06-03 18:15:00.000 | 7 |アウト 2018-06-03 18:30:00.000 | 8 | 2018-06-03 19:00:00.000 | 5 |アウト