ウィンドウ関数に関するヘルプが必要です。ウィンドウ内の合計とウィンドウ内の現在の合計を計算できることを知っています。しかし、前の現在の合計、つまり現在の行を含まない現在の合計を計算することはできますか?
ROW
またはRANGE
引数を使用する必要があると思います。私はCURRENT ROW
オプションがあることを知っていますが、私CURRENT ROW - 1
は無効な構文である必要があります。ROW
とのRANGE
議論に関する私の知識は限られているので、どんな助けもありがたいことに受けます。
私は、この問題に対する多くのソリューションがあることを知っているが、私は理解しているよROW
、RANGE
引数を、私はこの問題は、これらにひび割れすることが可能と仮定します。以前の実行中の合計を計算する1つの可能な方法を含めましたが、もっと良い方法があるのではないかと思います。
USE AdventureWorks2012
SELECT s.SalesOrderID
, s.SalesOrderDetailID
, s.OrderQty
, SUM(s.OrderQty) OVER (PARTITION BY SalesOrderID) AS RunningTotal
, SUM(s.OrderQty) OVER (PARTITION BY SalesOrderID
ORDER BY SalesOrderDetailID) - s.OrderQty AS PreviousRunningTotal
-- Sudo code - I know this does not work
--, SUM(s.OrderQty) OVER (PARTITION BY SalesOrderID
-- ORDER BY SalesOrderDetailID
-- ROWS BETWEEN UNBOUNDED PRECEDING
-- AND CURRENT ROW - 1)
-- AS SudoCodePreviousRunningTotal
FROM Sales.SalesOrderDetail s
WHERE SalesOrderID IN (43670, 43669, 43667, 43663)
ORDER BY s.SalesOrderID
, s.SalesOrderDetailID
, s.OrderQty