2017-10-08 15 views
0

トランザクション数が完了し、トランザクションの継続時間がグループごとに指定されたテーブルがあります。行データを累積的に表示する方法

enter image description here

は今は累積的に、例えば、トランザクションを追加する:持続時間が1つのトランザクションが2であり、持続時間が2つのトランザクション(2 + 4)= 6、持続時間5つのトランザクション(+ 3 6)= 9。 この方法を提案してください

+0

に移動します。何かを試してください。まだ苦労している場合は、https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-bea-a-を参照してください。非常にシンプルなSQLクエリ – Strawberry

+0

私はあなたに期待している出力を表示する必要があります。これは私には分かりません。 –

答えて

1

cumulative sumを探していますが、mySQLはANSI OLAP関数をサポートしていないため、ANSI標準の方法を計算することはできません。

変数を使用して、現在の値を以下のように前の合計に加算し続けることができます。

set @runningSum := 0; 
select duration, 
     transactions, 
     @runningSum := @runningSum + transactions AS TransRunningSum 
from t1; 

結果:

duration transactions TransRunningSum 
------------------------------------------- 
1    2    2 
2    4    6 
5    3    9 
6    1    10 
7    2    12 
11    1    13 
13    1    14 
15    1    15 

DEMO


アップデート1:

CORRとして、 elatedクエリがmySQLでサポートされている場合、同じ結果を得るために以下のように使用することもできます。

SELECT duration 
    ,transactions 
    ,(
     SELECT SUM(x.transactions) 
     FROM t1 x 
     WHERE x.duration <= t.duration 
     ) AS TransRunningSum 
FROM t1 t 
ORDER BY t.duration; 

結果:

duration transactions TransRunningSum 
------------------------------------------- 
1   2    2 
2   4    6 
5   3    9 
6   1    10 
7   2    12 
11   1    13 
13   1    14 
15   1    15 

DEMO

+0

ありがとうございます。できます!! –

+0

変数を使用せずにこれを実装できますか?これらの値をビューに表示する必要があり、ビューでは変数を使用できません。提案してください –

+0

更新された答えに示されているように相関クエリを使用することもできますが、変数オプションのように速くはありません:-) – zarruq