sql - 查找截至该时间的所有记录上某列的 SUM 为某个值的时间段

标签 sql postgresql

(我正在使用 PostgreSQL)

我有一个表,用于将交易存储到一个帐户。为了这个问题,想象它的结构如下:

create table transactions (
    timestamp timestamp with time zone not null,
    amount decimal(6,2) not null
);

任意时间点的余额可以通过以下方式获取:

select sum(amount) as balance from transactions where timestamp < 'point in time';

我如何找到余额(截至该时间点的 amount 总和)等于某个值(对我来说最有趣的值是 0,但一般的解决方案会很好)?

我知道涉及将 balance 反规范化到其自己的列中的解决方案。由于其他原因,我不想这样做,所以我正在寻找使用上述架构的建议。

最佳答案

试试这个:

select sum(amount) over(order by timestamp) as balance, timestamp 
from transactions where timestamp < 'point in time';

找出全零:

with a as
(
   select sum(amount) over(order by timestamp) as balance, timestamp
   from transactions where timestamp < 'point in time'
)
select * from a where balance = 0

关于sql - 查找截至该时间的所有记录上某列的 SUM 为某个值的时间段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11116082/

相关文章:

Android Sqlite 添加列后根据条件选择条目

mysql - 检索 MySQL 中的下一行

python - 如何删除 csv 文件中值周围的三重双引号?

python - Docker 公开容器之间的端口

PostgreSQL 和 Amazon EBS 快照?

mysql - SQL 嵌套集合表

mysql - 如何根据 SQL 中的条件在列而不是行中显示数据

c# - Entity Framework 中的两列外键

PostgreSQL 触发器引发错误 55000

node.js - 获取由 sequelize.js 生成的原始查询