Necesito ayuda con las funciones de ventanas. Sé que puedes calcular la suma dentro de una ventana y el total acumulado dentro de una ventana. Pero, ¿es posible calcular el total acumulado anterior, es decir, el total acumulado sin incluir la fila actual?
Supongo que necesitarías usar el argumento ROW
o RANGE
. Sé que hay una CURRENT ROW
opción, pero la necesitaría CURRENT ROW - 1
, que es una sintaxis no válida. Mi conocimiento de los argumentos ROW
y RANGE
es limitado, por lo que cualquier ayuda sería recibida con gratitud.
Sé que hay muchas soluciones a este problema, pero estoy en busca de entender los ROW
, RANGE
argumentos y supongo que el problema puede ser violada con estos. He incluido una forma posible de calcular el total acumulado anterior, pero me pregunto si hay una mejor manera:
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