sql - 使用 OVER() 的 SQL 查询。使用 SQL Server 限制输出行
问题描述
我的 SQL 很生疏。我正在使用 SQL Server Express 2014。这是一个在我的交易表中输出运行余额的工作查询:
SELECT Id, AccountId, TrxDate, Amount, SUM(Amount)
OVER(PARTITION BY ClientId, AccountId ORDER BY TrxDate, Id) AS Balance
FROM AccountTransaction
WHERE AccountId=1 ORDER BY TrxDate, ID;
这可以很好地获得有效的运行余额列。现在,我需要找到一种方法来始终计算整个表的运行余额,但只输出日期范围内的行。如果我添加 WHERE 子句,则 OVER() 仅应用于过滤的记录。所以我需要一种在整个表上执行 OVER() 的方法,并从这些行中获取一个子集。
在存储过程中,是否可以使用游标遍历某些行,但基于参数(日期间隔)中发送的条件,仅输出某些行?
还有其他方法吗?
解决方案
您可以使用子查询:
SELECT Id, AccountId, TrxDate, Amount,
SUM(Amount) OVER(PARTITION BY ClientId, AccountId ORDER BY TrxDate, Id) AS Balance,
(SELECT COUNT(*) FROM AccountTransaction) AS COUNT_OVERALL
FROM AccountTransaction
WHERE AccountId = 1;
您还可以使用APPLY
:
SELECT Id, AccountId, TrxDate, Amount,
SUM(Amount) OVER(PARTITION BY ClientId, AccountId ORDER BY TrxDate, Id) AS Balance,
ATT.CNT AS COUNT_OVERALL
FROM AccountTransaction AT CROSS APPLY
( SELECT COUNT(*)
FROM AccountTransaction
) ATT(CNT)
WHERE AT.AccountId = 1;
推荐阅读
- javascript - IE11 querySelector() 为空,但 querySelectorAll() 不是
- python - 将整个数据帧除以 100
- neo4j - Neo4j中合并子句中的冒号是什么意思?
- oracle - 将自定义类型传递给 Oracle 过程
- python - 覆盖特殊矩阵的 matmul
- python - 有没有办法为不平衡分类初始化 keras 内核?
- node.js - 将 Apollo Express 服务器部署到 Heroku 时出现问题:“缺少 GET 查询。”
- python - 在熊猫系列中数南 - 这种方式什么时候会失败?
- c - 内存泄漏 - C 中的单链表
- java - Eclipse - 创建一个新模板以添加“静态”字