Проблема Postgres - PullRequest
       5

Проблема Postgres

2 голосов
/ 20 декабря 2010

Допустим, у меня в таблице есть следующие данные:

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

Предположим, я хочу получить следующие данные для диапазона дат с 1 января 2010 года по 31 декабря 2010 года.

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 Ответ

3 голосов
/ 20 декабря 2010

Использование:

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 + приятно, предоставляя доступ к аналитическим / оконным функциям, таким как LAG .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...