синтаксис так и не осилил, но хочу разобраться и применять. Есть журнал платежей, там есть ИД платежа, дата и сумма. Как написать оконную функцию, чтоб у каждой записи было рассчитываемое поле ОСТАТОК в кассе? И второй вопрос - это будет сильно тормозить, если операций будет миллион? Получается, при каждом вызове селекта у каждой записи будет проводится просчет суммы с учетом все предыдущих операций?
С окнами select id, pmt_date, amount, sum(amount) over (order by pmt_date range between unbounded preceding and current row) as balance from payments order by pmt_date При входящем нулевом остатке. Если остаток не нулевой, то прибавьте его к sum(amount) over ... Но можно и без окон: select p.id, p.pmt_date, p.amount, (select sum(amount) from payments where pmt_date <= p.pmt_date) as balance from payments p order by pmt_date
Второй способ я и применял, хочу расширить кругозор, но синтаксис - как латинское проклятие :) а по скорости окна оптимальнее будут? Этот для каждой операции суммирование делать надо всего столбца
explain (analyze, buffers) в руки
Хм не вижу partition by и тд. Странный запрос
А зачем партишон то? По условию касса одна
Ой да там даже клиента нет) Извиняюсь
»range berween... ммм, кстати, а разве оконка агрегирующая с ордер баем не будет по дефолту набегающую сумму делать? или я что-то перепутал?
Вроде этого и хотят, не?
Обсуждают сегодня