Ho bisogno di aiuto con le funzioni di windowing. So che puoi calcolare la somma all'interno di una finestra e il totale parziale all'interno di una finestra. Ma è possibile calcolare il totale parziale precedente, cioè il totale parziale senza la riga corrente?
Suppongo che dovresti usare l' argomento ROW
o RANGE
. So che esiste CURRENT ROW
un'opzione, ma avrei bisogno CURRENT ROW - 1
, che è una sintassi non valida. La mia conoscenza degli argomenti ROW
e RANGE
è limitata, quindi qualsiasi aiuto sarebbe ricevuto con gratitudine.
So che ci sono molte soluzioni a questo problema, ma sto cercando di capire gli argomenti ROW
, RANGE
e presumo che il problema possa essere risolto con questi. Ho incluso un modo possibile per calcolare il totale parziale precedente ma mi chiedo se esiste un modo migliore:
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