Saya butuh bantuan dengan fungsi windowing. Saya tahu Anda bisa menghitung jumlah di dalam jendela dan total yang berjalan di dalam jendela. Tetapi apakah mungkin untuk menghitung total running sebelumnya yaitu total running tidak termasuk baris saat ini?
Saya menganggap Anda perlu menggunakan argumen ROW
atau RANGE
. Saya tahu ada CURRENT ROW
opsi tapi saya perlu CURRENT ROW - 1
, yang sintaks tidak valid. Pengetahuan saya tentang ROW
dan RANGE
argumen terbatas sehingga bantuan apa pun akan diterima dengan penuh syukur.
Saya tahu bahwa ada banyak solusi untuk masalah ini, tetapi saya ingin memahami ROW
, RANGE
argumen dan saya berasumsi masalahnya dapat dipecahkan dengan ini. Saya telah memasukkan satu cara yang mungkin untuk menghitung total berjalan sebelumnya tetapi saya bertanya-tanya apakah ada cara yang lebih baik:
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