Как сделать sum(x) до определенного значения в результате выборки?
Есть таблица с полями:
id (int), amount (numeric), is_stop (bool), created_at (timestamptz)
SELECT SUM(mo.amount)
FROM orders.mq_order mo ORDER BY mo.id, mo.created_at
Нужно сделать так, чтобы в sum() посчитались только те записи, которые идут до первой записи со значением поля is_stop, true (включительно)
Если таблица mq_order имеет такие данные:
1 10 false дата какая-то
23 15 false дата какая-то
31 9 false дата какая-то
54 10 true дата какая-то
565 4123 false дата какая-то
6565 323 false дата какая-то
54545 3434 false дата какая-то
Тогда результат функции должен быть 44
Такой способ кажется плохим:
- делаю запрос типа:
select id from mq_order where is_stop == true order by id, created_at limit 1
sum(x) where id <= id из прошлого запроса
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
SELECT SUM(amount)
FROM mq_order
WHERE id <= ( SELECT FIRST_VALUE(id) OVER (ORDER BY id) fv
FROM mq_order
WHERE is_stop )
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=1384714ec3e1c66093e963f8566a16b3