我有一个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部分的工作方式。有人可以指出我正确的方向吗?
答案 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