我想在选择查询的每一行中计算运行总计,以便我可以基于该总计过滤返回的行。我的看法只有两种选择。
- 在select语句中使用
over
,并使主查询成为子查询
示例:
SELECT DocDate,Debit,RunningTotal
FROM
(
SELECT T1.DocDate,T1.Debit,SUM(T1.Debit) OVER(ORDER BY T1.DocDate DESC) AS RunningTotal
FROM Invoices T1
) AS T
WHERE RunningTotal < @CurrentBalance
-
Join
表本身
示例:
SELECT T1.DocDate,SUM(T2.Debit) AS RunningTotal
FROM Invoices T1
JOIN Invoices T2 ON T1.DocDate <= T2.DocDate
GROUP BY T1.DocDate,T1.Debit
HAVING SUM(T2.Debit) < @CurrentBalance
ORDER BY T1.DocDate DESC
两个查询都返回完全相同的结果。不过从性能角度来看,建议的前进方式是什么?