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 ROWo RANGE. So che esiste CURRENT ROWun'opzione, ma avrei bisogno CURRENT ROW - 1, che è una sintassi non valida. La mia conoscenza degli argomenti ROWe 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, RANGEe 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