2017-07-12 8 views
0

最後の7日間の値を合計する必要があるため、現在の値と前の6を加算する必要があります。ケース 6.前回+現在のこと: -グループを含む前の6つの値の合計を取得する

The requested scenario

(注: - 私は秒をsumingことで、時間を計算します)。私は以下のクエリを使用してみました

: -

選択SUM([drivingTime])

[f.DriverHseCan]から
(6前後CURRENT ROW BETWEEN日付列BY driverid ORDER BY PARTITION)OVER私が直面

の問題は、私はドライバーにグループ化しなければならないような場合には

scenario

日の資産であり、駆動時間は、その後、それをsumedすべきであり、前の6行を取るべきです rank()を使ってこれを行うことはできません。なぜなら、これらの行だけでなく、レポートに表示する必要があるからです。

SSRSとSQLの両方でこれを実行しようとしました。

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

一般的なソリューションではなく、問題に固有の解決策を望まないこのような質問のために、私は、サンプルを挿入したサンプルの一時テーブルをデータに追加して、簡単にソリューションを提案して検証できると信じています。どう思いますか? – 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 

次のクエリを試してみてください:それは現在の+ 6前の日

+0

それは働いて、多くのniktrs、ありがとう –

+0

あなたは歓迎です – niktrs

0

私は凝集が何をしたいんだと思うのための総駆動時間を加算さ要するに

週の開始日と終了日を設定すると、問題を解決するための優れた選択肢が得られる可能性があります。 SQLサーバーの自己結合ではなく、SSRS式で週番号を使用してください

+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

参考:私の答えが基づいて同様のクエリでクロス適用をテストしました。同じ、ただしクロス・アプライが自己結合と比較してうまくいっていない(14倍遅い)結果 – niktrs

+0

他のオプションは、テンポラリ・テーブルまたはCTEを使用して値を事前に計算し、メイン・クエリで使用することです。 – ViKiNG

関連する問題