2016-08-11 22 views
1

企業は毎日従業員の1人に報酬を与えます。データはREWARDSというテーブルに保持されます。以下のサンプルデータに示されているように、我々は次のような構造を持つテーブルで一日ごとに1つの行を持っている:MySQLの累積合計

(フォーマット貧しいテーブル用申し訳ありませんが)

REWARD_DATE EMP_ID REWARD_AMT 
1-Jan-15 101  400 
2-Jan-15 102  300 
3-Jan-15 101  700 
4-Jan-15 102  500 
5-Jan-15 103  100 

あなたがランニングを報告するクエリを書くことができます合計は次のようになりますか?

REWARD_DATE #EMP TOT_REWARD_AMT 
1-Jan-15 1   400 
2-Jan-15 2   700 
3-Jan-15 2   1400 
4-Jan-15 2   1900 
5-Jan-15 3   2000 
+0

'REWARD_DATE'のデータ型は何ですか? – 1000111

+0

他のRDBMSとは異なり、MySQLは解析機能をサポートしていません(これにより、この作業は簡単に行えます)。ユーザー変数を含むハックを使用してそれでもやり遂げることができますが、おそらく、この種の計算をアプリケーションコードで実行することをお勧めします。 – eggyal

+0

これはMySQLで行う必要はありません。どのSQL環境でも構いません。 REWARD_DATEは数値変数です。 – James

答えて

2

あなたは(今少し単純化)これを行うことができます:

SELECT b.rdate, COUNT(distinct a.eid) empcnt, SUM(a.amnt) total 
FROM tbl a 
INNER JOIN tbl b ON b.rdate>=a.rdate 
GROUP BY b.rdate 

としては、ここで示された:http://sqlfiddle.com/#!9/f6871/2

+0

これは偏心です!これを処理するうまい方法。 :) – 1000111

+0

まあまあ、最も単純な方法。 ;-) – cars10m

+0

正直言って私は別のやり方で考えていた(徐々に複雑に向かっている)。そして、私はあなたが前の日の伝播を次の日に処理した方法を本当に愛していました。 – 1000111