【发布时间】:2013-05-24 12:44:14
【问题描述】:
我需要一些关于窗口功能的帮助。
我最近一直在玩 sql 2012 窗口函数。我知道你可以计算一个窗口内的总和和一个窗口内的总和。但我想知道;是否可以计算以前的运行总计,即不包括当前行的运行总计?我假设您需要使用 ROW 或 RANGE 参数,并且我知道有一个 CURRENT ROW 选项,但我需要一个 CURRENT ROW - I 这是无效的语法。我对 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
提前致谢
【问题讨论】:
-
请不要在database administrators 和这里发帖,除非答案可能与程序员与 dba 的观点不同。
标签: sql sql-server-2012