Postgres问题

时间:2010-12-20 05:07:52

标签: sql postgresql

说我的表中有以下数据;

tran_date    withdraw     deposit
25/11/2010          0         500
2/12/2010         100           0
15/12/2010          0         300
18/12/2010          0         200
25/12/2010        200           0

假设我希望在2010年1月12日至2010年12月31日期间获得以下日期范围。

tran_date    withdraw    deposit    balance     days_since_last_tran
1/12/2010           0          0        500                        0
2/12/2010         100          0        400                        1
15/12/2010          0        300        700                       13
18/12/2010          0        200        900                        3
25/12/2010        200          0        700                        7
31/12/2010          0          0        700                        6

这在PostgreSQL 8.4中是否可行?

1 个答案:

答案 0 :(得分:3)

使用:

SELECT t.tran_date,
       t.withdraw,
       t.deposit,
       (SELECT SUM(y.deposit) - SUM(y.withdrawl)
          FROM YOUR_TABLE y
         WHERE y.tran_date <= t.tran_date) AS balance,
       t.tran_date - COALESCE(LAG(t.tran_date) OVER(ORDER BY t.tran_date), 
                              t.tran_date) AS days_since_last
  FROM YOUR_TABLE t

8.4+很不错,提供access to analytic/windowing functions like LAG