2017-07-12 19 views
0

我需要总结的值,过去7天,所以它应该是目前加上之前的6这应该每一行中即发生每一行的列值会是当前+先前6. 壳体: -获取先前6个值的总和,包括组

The requested scenario

(注: - I将计算小时,通过suming了秒)。

我尝试使用以下查询: -

SELECT SUM([drivingTime])OVER(PARTITION BY driverid ORDER BY日期行之间6 PRECEDING AND CURRENT ROW)
从[f.DriverHseCan]

我面临的问题是我必须做的分组上的驱动程序,资产约会

scenario

在上述情况下,驾驶时间应SUMED起来,然后,它应该采取前面的6行, 我不能这样做使用rank(),因为我需要这些行以及我必须在报告中显示它。

我试图在SSRS和SQL都这样做。

总之它增加了对当前+ 6前几天

+0

亲爱Naved巴伊,对于这样的问题,你不想要一个通用的解决方案,但您的特定问题的解决方案,我相信它总是好的,以添加样本样本临时表中插入数据,这样一个可以建议和轻松验证解决方案。你怎么看? – ViKiNG

回答

1

尝试以下查询

SELECT 
     s.date 
     , s.driverid 
     , s.assetid 
     , s.drivingtime 
     , SUM(s2.drivingtime) AS total_drivingtime 
    FROM f.DriverHseCan s 
    JOIN (
     SELECT date,driverid, SUM(drivingtime) drivingtime 
     FROM f.DriverHseCan 
     GROUP BY date,driverid 
     ) AS s2 
     ON s.driverid = s2.driverid AND s2.date BETWEEN DATEADD(d,-6,s.date) AND s.date 
    GROUP BY 
     s.date 
     , s.driverid 
     , s.assetid 
     , s.drivingtime 

如果你有每周开始/结束日期,可能会有更好的表现方式来解决您的问题,例如使用SSRS表达式周数,而不是做SQL服务器

+0

它的工作,非常感谢niktrs, –

+0

欢迎您 – niktrs

0

我想聚集你想要做什么总行驶时间:

select sum(sum([drivingTime])) over (partition by driverid 
            order by date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW 
            ) 
from [f.DriverHseCan] 
group by driverid, date 
+0

是的,我想在报告中显示assetId,drivingTime,在分组中添加这些列并不能解决目的。 –

0

我猜你需要使用CROSS APPLY对自我加入。

像下面这样的东西? :

SELECT driverID, 
     date, 
     CA.Last6DayDrivingTime 

FROM YourTable YT 
     CROSS APPLY 
     (
     SELECT SUM(drivingTime) AS Last6DayDrivingTime 
     FROM YourTable CA ON CA.driverID=YT.driverID 
     WHERE CA.date BETWEEN DATEADD(DAY,-6,YT.date) AND YT.date) 
    ) CA 

编辑: 当你评论说,跨应用放缓的表现,另一种选择是预先在临时表或使用CTE计算周值,然后在主查询中使用它们。

+0

FYI:我已经测试的传中到我的答案是基于类似的查询申请。结果相同但交叉应用性能不佳(速度减慢14倍) – niktrs

+0

然后,其他选项是预先计算临时表中的值或使用CTE,然后在主要查询中使用它们。 – ViKiNG