我有一个SQL Server数据库,其中存储了每个员工按日期工作的小时数。我需要计算每个员工在过去7天内每个日期工作的总工时数。
我的数据如下
我想要制作的内容如下
我在T-SQL中用来构建产生这些结果的查询的每次尝试都不会执行,因为我一直想在子查询中引用外部查询中的字段,如下所示 -
我确实考虑过使用PARTITION BY,但我认为这会给我最后7个条目的总数,而不是过去7天(日期范围)的总数,因为有时候员工没有条目某个日期(例如,注意在2015年11月2日没有Bob的条目)。
我在这里使用英国日期格式。
{Start}和{End}也是客户设置的参数,例如,如果他们想要查看11月份的所有周总数,他们会设置{Start} = 01/11/2015 {End} = 2015年11月30日。这些将在Crystal Reports中设置,而不是在TSQL中。我刚才在这里解释了我的最终目标是什么。
答案 0 :(得分:3)
在SQL Server中,最简单的方法可能是使用outer apply
:
select t.*, tt.weekly
from t outer apply
(select sum(t2.daily) as weekly
from t t2
where t2.name = t.name and
t2.date > dateadd(day, -7, t.date) and
t2.date <= t.date
) tt;