(我正在使用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
非规范化到其自己的列中的解决方案。我不希望出于其他原因这样做,所以我正在寻找使用上述模式的建议。
答案 0 :(得分:1)
试试这个:
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