Tôi cần một số trợ giúp với các chức năng cửa sổ. Tôi biết bạn có thể tính tổng trong một cửa sổ và tổng số đang chạy trong một cửa sổ. Nhưng có thể tính tổng chạy trước đó tức là tổng chạy không bao gồm hàng hiện tại không?
Tôi giả sử bạn sẽ cần phải sử dụng ROW
hoặc RANGE
đối số. Tôi biết có một CURRENT ROW
tùy chọn nhưng tôi sẽ cần CURRENT ROW - 1
, đó là cú pháp không hợp lệ. Kiến thức của tôi về ROW
và các RANGE
đối số còn hạn chế nên mọi sự giúp đỡ đều được nhận một cách biết ơn.
Tôi biết rằng có nhiều giải pháp cho vấn đề này, nhưng tôi đang tìm cách hiểu ROW
, các RANGE
lập luận và tôi cho rằng vấn đề có thể bị bẻ khóa với những vấn đề này. Tôi đã bao gồm một cách có thể để tính tổng chạy trước đó nhưng tôi tự hỏi liệu có cách nào tốt hơn không:
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