2016-08-11 274 views
1

一家公司每天都會獎勵一名員工。數據保存在名爲REWARDS的表中。如下面的樣本數據顯示,我們在表每天一排結構如下: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