279


SQL Serverで下記のクエリーを作りました：

[code]

    SELECT dateadd(hour, datediff(hour, 0, CreationDate), 0), COUNT(*)
    FROM Table
    GROUP BY dateadd(hour, datediff(hour, 0, CreationDate), 0)
    
[/code]

結果は一時間ごとにその時間の新しいレコードになります：

[code]

    12/2/14 0:00    174
    12/2/14 1:00    108
    12/2/14 2:00    84
    12/2/14 3:00    48
    12/2/14 4:00    21
    
[/code]

累計をしたい場合に、どう変換すればいいですか？

目指している結果は下記です：

[code]

    12/2/14 0:00    174
    12/2/14 1:00    282
    12/2/14 2:00    366
    12/2/14 3:00    414
    12/2/14 4:00    435
    
[/code]


CC BY-SA 3.0
2014-12-02T23:36:13.017
275
2014-12-03T03:39:52.483
2014-12-03T03:39:52.483
85
10
question
sql sql-server
SQL Serverで日時ごとの件数の累積値を出力するSQL


window関数を使うといいと思います。  
SQL Fiddleにサンプルコードを載せました。

<http://sqlfiddle.com/#!6/e30e7/7>

参考までにコードを転記しておきます。

[code]

    create table some_log (
      CreationDate datetime
    )
    
    insert some_log values ('2014-12-02 00:10')
    insert some_log values ('2014-12-02 00:20')
    insert some_log values ('2014-12-02 00:30')
    insert some_log values ('2014-12-02 01:10')
    insert some_log values ('2014-12-02 02:10')
    insert some_log values ('2014-12-02 02:10')
    
    WITH count_by_hour AS
      (SELECT dateadd(hour, datediff(hour, 0, CreationDate), 0) AS datetime,
              COUNT(*) AS cnt
       FROM some_log
       GROUP BY dateadd(hour, datediff(hour, 0, CreationDate), 0))
    SELECT datetime,
           cnt,
           SUM(cnt) over(ORDER BY datetime) AS cum_cnt
    FROM count_by_hour
    ORDER BY datetime
    
[/code]

実行結果

![画像の説明をここに入力](https://i.stack.imgur.com/ibAqp.png)

window関数の詳しい使い方はこちらです。

<http://msdn.microsoft.com/ja-jp/library/ms189461.aspx>


CC BY-SA 3.0
2014-12-03T00:14:47.637
279
2014-12-03T00:14:47.637
85
275
answer