Мені потрібна допомога щодо функцій вікон. Я знаю, що ви можете обчислити суму у вікні та загальну кількість у вікні. Але чи можна обчислити попередній загальний обсяг, тобто загальний запуск, не враховуючи поточний рядок?
Я припускаю, що вам потрібно буде використовувати аргумент ROW
або RANGE
Я знаю, що є CURRENT ROW
варіант, але мені знадобиться CURRENT ROW - 1
, а це недійсний синтаксис. Мої знання ROW
та RANGE
аргументи обмежені, тому будь-яка допомога буде вдячно отримана.
Я знаю , що є багато способів вирішення цієї проблеми, але я шукаю , щоб зрозуміти ROW
, RANGE
аргументи і я вважаю , що проблема може бути зламана з ними. Я включив один можливий спосіб обчислити попередній загальний облік, але мені цікаво, чи є кращий спосіб:
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