Pencereleme işlevleriyle ilgili yardıma ihtiyacım var. Bir pencerede toplamı ve bir pencerede çalışan toplamı hesaplayabileceğinizi biliyorum. Fakat bir önceki koşu toplamını, yani mevcut satırı içermeyen koşu toplamını hesaplamak mümkün müdür?
ROWVeya RANGEargümanını kullanmanız gerektiğini varsayıyorum . Ben bir CURRENT ROWseçenek olduğunu biliyorum ama ihtiyacım var CURRENT ROW - 1, bu geçersiz sözdizimi. ROWVe RANGEargümanları hakkındaki bilgim sınırlıdır, bu nedenle herhangi bir yardım minnetle alınır.
Bu sorunun birçok çözüm olduğunu biliyorum ama anlamak arıyorum ROW, RANGEargümanları ve Sorun bunlarla kırık olabilir varsayalım. Önceki toplam toplamı hesaplamak için olası bir yol dahil ettim ama daha iyi bir yol olup olmadığını merak ediyorum:
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