Postgres Сумма продаж за разные периоды
Прошу помощи в решении задачи. У меня есть две таблицы в БД на Postgres.
Первая таблица содержит Магазин, Товар и Период действия цены (с и по)
| store | material | date_start | date_end |
|---|---|---|---|
| 0110 | 755865 | 01.09.2021 | 03.09.2021 |
| 0850 | 7586884 | 02.09.2021 | 04.09.2021 |
Вторая таблица содержит продажи кол-ва по дням, магазинам и товарам
| day | store | material | qty |
|---|---|---|---|
| 01.09.2021 | 0110 | 755865 | 5 |
| 01.09.2021 | 0850 | 7586884 | 2 |
| 02.09.2021 | 0850 | 7586884 | 4 |
| 03.09.2021 | 0110 | 755865 | 8 |
| 03.09.2021 | 0850 | 7586884 | 1 |
| 04.09.2021 | 0850 | 7586884 | 4 |
| 05.09.2021 | 0850 | 7586884 | 3 |
Прошу подсказать каким образом можно зная периоды дат по снижению цены из первой таблицы, посчитать сумму проданного за этот период из второй таблицы?
На примере записи магазина 0850, снижение было в период с 02.09.2021 по 04.09.2021 Должно получится что для магазина 0850 за этот период суммарно продано 9 ЕИ товара.
Заранее спасибо.
Ответы (1 шт):
У вас две таблицы, для их соединения следует использовать оператор join. Критерий соединения, очевидно, совпадение идентификаторов магазина, материала и попадание в интервал дат.
Далее вас интересует сумма по магазинам, для этого соответственно потребуется агрегатная функция суммирования и группировка по магазину.
как результат должно получиться что-то вроде
SELECT t1.store
, sum(t2.qty) AS qty
FROM t1
INNER JOIN t2 on (
t2.store = t1.store
AND t2.material = t1.material
AND t2.day between t1.date_start and t1.date_end
)
GROUP BY t1.store