J'ai besoin d'aide pour les fonctions de fenêtrage. Je sais que vous pouvez calculer la somme dans une fenêtre et le total cumulé dans une fenêtre. Mais est-il possible de calculer le total cumulé précédent, c'est-à-dire le total cumulé hors ligne actuelle?
Je suppose que vous auriez besoin d'utiliser l' argument ROW
or RANGE
. Je sais qu'il y a une CURRENT ROW
option mais j'aurais besoin d' CURRENT ROW - 1
une syntaxe invalide. Ma connaissance des arguments ROW
et RANGE
est limitée, donc toute aide serait reçue avec gratitude.
Je sais qu'il ya beaucoup de solutions à ce problème, mais je cherche à comprendre les ROW
, RANGE
arguments et je suppose que le problème peut être craqué avec ces derniers . J'ai inclus une façon possible de calculer le total cumulé précédent mais je me demande s'il y a une meilleure façon:
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