2017-07-12 20 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