3

(私は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バランス (その時点までの s の合計) が特定の値 (私にとって最も興味深い値は 0 ですが、一般的な解決策があればよいでしょう) に等しいすべての期間をどのように見つけることができますか?

balance独自の列への非正規化を含む解決策を認識しています。他の理由でそれをしたくないので、上記のスキーマを使用して提案を探しています。

4

1 に答える 1

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
于 2012-06-20T09:43:29.783 に答える