sql >> データベース >  >> RDS >> Sqlserver

SQL 2008 を使用した異なるレコード間の部分合計

    これは、各島が "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
      

    DB Fiddle のデモ :

    タイムスタンプ |値 | 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 |アウト 



    1. 既存のデータをチェックせずに変更テーブルに制約を作成する

    2. Oracleのすべてのマテリアライズドビューのリストを取得する方法

    3. スクリプト内からSQLServerスクリプトのタイムアウトを設定するにはどうすればよいですか?

    4. SQLServerの1つの列に基づいて複数の列をピボットする