윈도우 기능에 대한 도움이 필요합니다. 창 내 합계와 창 내 누적 합계를 계산할 수 있다는 것을 알고 있습니다. 그러나 이전 누적 합계, 즉 현재 행을 포함하지 않는 누적 합계를 계산할 수 있습니까?
ROW
또는 RANGE
인수 를 사용해야한다고 가정합니다 . CURRENT ROW
옵션이 있지만을 (를) 알고 싶습니다 CURRENT ROW - 1
. 이는 유효하지 않은 구문입니다. ROW
와 RANGE
논쟁에 대한 나의 지식 은 제한적이므로 어떤 도움도 감사하게 받아 들일 것이다.
나는이 문제에 대한 많은 솔루션이 있다는 것을 알고 있지만 나는 이해 찾고 ROW
, RANGE
인수를 나는 문제가이 금이 될 수있다 가정합니다. 이전 누적 합계를 계산하는 한 가지 방법을 포함했지만 더 나은 방법이 있는지 궁금합니다.
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