ウィンドウ関数のヘルプが必要です。
最近、SQL 2012 ウィンドウ関数をいじっています。ウィンドウ内の合計とウィンドウ内の現在の合計を計算できることを知っています。しかし、私は疑問に思っていました。以前の現在の合計、つまり現在の行を含まない現在の合計を計算することは可能ですか? ROW または RANGE 引数を使用する必要があると思いますが、CURRENT ROW オプションがあることは知っていますが、無効な構文である CURRENT ROW - I が必要です。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
前もって感謝します