1

集計関数の作成に問題があります。これが私の問題です:

このようなテーブルがあります

 id action day         isSum difference
 1  ping   2012-01-01  1     500         (this is the sum of the differences from last year)
 2  ping   2012-01-01  0     -2
 3  ping   2012-01-02  0      1
 4  ping   2012-01-03  0     -4
 5  ping   2012-01-04  0     -2
 6  ping   2012-01-05  0      3
 7  ping   2012-01-06  0      2
 8  ping   2012-01-01  1      0         (this is the sum of the differences from last year, now for pong)
 9  pong   2012-01-01  0     -5
 10  pong   2012-01-02  0      2
 11  pong   2012-01-03  0     -2
 12  pong   2012-01-04  0     -8
 13  pong   2012-01-05  0      3
 14  pong   2012-01-06  0      4

ここで、アクション、日、および毎日の 01-01 以降の差の要約を選択する必要があるため、結果は次のようになります。

action day        total      
ping   2012-01-01 498
ping   2012-01-02 499
ping   2012-01-03 495
ping   2012-01-04 493
ping   2012-01-05 496
ping   2012-01-06 498
pong   2012-01-01 - 5
pong   2012-01-02 - 3
pong   2012-01-03 - 5
pong   2012-01-04 -13
pong   2012-01-05 -10
pong   2012-01-06 - 6

これどうやってするの?

多くのデータセット ( ~100 万) があるため、クエリはかなり安価である必要があります。アクション列に応じて、合計を使用して毎日のレコードの合計を取得する方法がわかりません。

4

1 に答える 1

2

合計フィールドを取得するには、 SUBQUERYを使用する必要があります。

select action, day, 
 (select sum(difference) from x 
   where action = t2.action and day <= t2.day 
   group by action) as total
from x t2 group by action ,day

SQLFIDDLEでそれを参照してください

于 2012-09-17T08:45:10.607 に答える