我需要有关开窗功能的帮助。我知道您可以计算一个窗口内的总和以及一个窗口内的运行总额。但是是否可以计算先前的运行总计,即运行总计不包括当前行?
我认为您将需要使用ROW
or 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