Каков наилучший способ присоединения промежуточного итога к выбранным данным строки? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть таблица, которая выглядит следующим образом:

Created at    | Amount  | Register Name
--------------+---------+-----------------
01/01/2019... | -150.01 | Front
01/01/2019... |   38.10 | Back

Каков наилучший способ прикрепления промежуточного итогового значения по возрастанию к каждой записи, который применяется только к имени регистра, имеющегося в записи?Я могу сделать это в Ruby, но делать это в базе данных будет намного быстрее, поскольку это веб-приложение.

Приложение - это приложение Rails, работающее на Postgres 10, хотя ответ может быть, конечно, независимым от Rails.

1 Ответ

0 голосов
/ 07 февраля 2019

Используйте агрегат sum() в качестве оконной функции, например:

with my_table (created_at, amount, register_name) as (
values
    ('2019-01-01', -150.01, 'Front'),
    ('2019-01-01',   38.10, 'Back'),
    ('2019-01-02', -150.01, 'Front'),
    ('2019-01-02',   38.10, 'Back')
)

select 
    created_at, amount, register_name,
    sum(amount) over (partition by register_name order by created_at)
from my_table
order by created_at, register_name;

 created_at | amount  | register_name |   sum   
------------+---------+---------------+---------
 2019-01-01 |   38.10 | Back          |   38.10
 2019-01-01 | -150.01 | Front         | -150.01
 2019-01-02 |   38.10 | Back          |   76.20
 2019-01-02 | -150.01 | Front         | -300.02
(4 rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...