累积SQL计算

时间:2017-03-19 13:57:17

标签: sql ms-access

我有一个MS Access表(tbl_SalesData),如下所示:

 SCOREDATE | USERID  |      Sales     | HoursWorked | 
-----------------------------------------------------
01/03/2017 | 20511   |       20       |     10      | 
02/03/2017 | 20511   |       27       |     9       | 
03/03/2017 | 20511   |       18       |     9       | 
04/03/2017 | 20511   |       20       |     8       | 

我正在尝试编写一个SQL查询,该查询将计算每天和YTD的每小时销售额。

YTD计算需要将截至当天(包括当天)的所有销售额与MonthWorked相同,然后将总销售额除以工作小时数。所以期望的输出是:

 SCOREDATE | USERID  |   Sales/Hour   | Sales/Hour YTD | 
--------------------------------------------------------
01/03/2017 | 20511   |       2        |      2         | 
02/03/2017 | 20511   |       3        |      2.47      | 
03/03/2017 | 20511   |       2        |      2.32      | 
04/03/2017 | 20511   |       2.5      |      2.36      | 

我真的很挣扎这个。每日销售/小时非常简单,如下所示:

SELECT SCOREDATE, USERID, Sales/HoursWorked
FROM tbl_SalesData

但不幸的是,我似乎无法确定YTD部分的工作方式。有人可以指出我正确的方向吗?

2 个答案:

答案 0 :(得分:3)

您可以使用相关子查询:

select sd.*,
       (select sum(sd2.sales) / sum(sd2.hours_worked)
        from tbl_SalesData sd2
        where sd2.userid = sd.userid and sd2.scoredate <= sd.scoredate
       ) as running_average_sales
from tbl_SalesData as sd;

答案 1 :(得分:0)

非常感谢Gordon Linoff使用相关子查询得到了很好的答案。 我还遇到了另一个我认为可能有用的解决方案。它使用自连接而不是子查询,我相信使用大型数据集可以更快地运行

Target