Получить среднее - PullRequest
       5

Получить среднее

0 голосов
/ 20 февраля 2020

Можете ли вы сделать запрос, который

Мои данные выглядят так:

acccount_id | value | timestamp 
-------------------------------
a12         | 122   | jan 1
a13         | 133   | jan 1
a14         | 443   | jan 1
a12         | 251   | jan 2
a13         | 122   | jan 2
a14         | 331   | jan 2
a12         | 412   | jan 3
a13         | 323   | jan 3
a14         | 432   | jan 3

Я хотел бы получить среднее значение за все предыдущие дни для каждой учетной записи.

acccount_id | value | timestamp | Average
-----------------------------------------
a12         |  122  | jan 1     | 122
a13         |  133  | jan 1     | 133
a14         |  443  | jan 1     | 443
a12         |  251  | jan 2     | 188.5
a13         |  122  | jan 2     | 222.5
a14         |  331  | jan 2     | 387
a12         |  412  | jan 3     | 261.6
a13         |  323  | jan 3     | 192.6
a14         |  432  | jan 3     | 402

Я не профессионал с Postgres, но я искал оконные функции , и мне кажется, что путь к go, но я не мог заставить его работать правильно. Я, очевидно, также открыт для лучших вариантов.

Для получения дополнительной информации я буду генерировать новые значения каждый день и иметь лямбда-функцию, которая их вычисляет. Поэтому заявление, которое будет добавлено там, где значения не существуют, будет именно тем, что я пытаюсь сделать.

1 Ответ

4 голосов
/ 20 февраля 2020

Вам нужно скользящее среднее, и это действительно делается с помощью оконных функций. Когда вы задаете ORDER BY для определения раздела агрегата, вы получаете скользящее среднее

select account_id, value, "timestamp", 
       avg(value) over (partition by account_id order by "timestamp") as average
from the_table
order by account_id, "timestamp";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...