2016-08-11 179 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