Я пытаюсь создать запрос, который бы вычислял количество метрик MTD.Поэтому, если бы я хотел рассчитать доход 12 декабря, он бы суммировал все дни между 1 декабря и 12 декабря.
Если бы я хотел сравнить рост выручки за два месяца, то сравнил бы этот интервал с 1-го ноября по 12-е ноября.
Я пытался использовать оконные функции, чтобы сделать именно это.
select ms.date, ms.market,
sum(ms.rev) as "rev_this_month",
lag(sum(ms.rev)) over (partition by ms.market order by ms.date) as "last_month_rev",
(sum(ms.rev) - (cast((lag(sum(ms.rev)) over
(partition by ms.market order by ms.date))as float)))/
cast((lag(sum(ms.rev)) over
(partition by ms.market order by ms.date))as float) as "MTD_rev_growth"
From market_sales ms
where
a.date between trunc(DATE_TRUNC('day', current_date)) - interval '30 day'
and trunc(DATE_TRUNC('day', current_date))
И я бы ожидал что-то вроде этого:
Date | Market | Rev_this_month | Rev_last_month | MTD
2018-12-12 Aus 10 5 1.0
2018-12-12 SF 40 40 0
2018-12-12 PA 10 20 -0.50
Но вместо этого я получаю
Date | Market | Rev_this_month | Rev_last_month | MTD_Rev_growth
2018-12-12 Aus 10 5 1.0
2018-12-11 Aus 5 2 x
2018-12-10 Aus 2 0 x
...
2018-12-12 SF 40 40 0
2018-12-11 SF 40 20 1.0
и т. Д.
Этосвязанные с моими оконными функциями или это как я фильтрую вещи в предложении where?
Буду признателен за любую помощь.
РЕДАКТИРОВАТЬ:
Извинения за опоздание, Ушелкемпинг.В любом случае вот некоторые примеры данных на основе запроса:
Market | Date | Rev
Aus 2018-01-03 55
SF 2018-01-04 33
SF 2018-01-20 04
PA 2018-01-21 60
BAL 2018-01-29 70
SF 2018-02-12 31