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?
ROW
Veya RANGE
argümanını kullanmanız gerektiğini varsayıyorum . Ben bir CURRENT ROW
seçenek olduğunu biliyorum ama ihtiyacım var CURRENT ROW - 1
, bu geçersiz sözdizimi. ROW
Ve RANGE
argü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
, RANGE
argü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