2014-10-29 1 views
0

У меня есть запрос к базе данных работают на Postgresql 9.3, который выглядит, как это для того, чтобы получить текущий остаток бухгалтерских записей:Получение даты переплета нарастающего итога на PostgreSQL

select *,(sum(amount) over(partition 
by 
    ae.account_id 
order by 
    ae.date_posted, 
    ae.account_id 
)) as formula0_1_ 
from 
    account_entry as ae 
-- where ae.date_posted> '2014-01-01' 
order by account_id desc, date_posted asc 

ожидается выход без где положение будет быть:

id | date   | amount | running balance 
1 2014-01-01  10   10 
2 2014-01-02  10   20 

, что я получаю с ИНЕКЕ:

id | date   | amount | running balance 
2 2014-01-02  10   10 

Как я могу сделать этот запрос возвращать мне те же самые правильные результаты, если я попытаюсь фильтровать диапазон дат (бит, прокомментированный выше)?

+0

Postgres-версия? –

+0

Можете ли вы также показать пример входных данных и ожидаемого результата? –

+0

(Вопрос обновлен для версии postgres и примерных данных) – wwadge

ответ

1

Необходимо сначала рассчитать и подсчитать остатки бега по всем данным, а затем поставить предложение WHERE в наружном SELECT.

SELECT 
    * 
FROM 
    (SELECT 
    *, 
    SUM(amount) OVER (
     PARTITION BY 
     ae.account_id 
     ORDER BY 
     ae.date_posted, 
     ae.account_id 
    ) AS formula0_1_ 
    FROM 
    account_entry AS ae) AS total 
WHERE 
    total.date_posted > '2014-01-01' 
ORDER BY 
    account_id DESC, 
    date_posted ASC; 
Смежные вопросы