У меня есть следующие таблицы (упрощенные ниже):
Orders:
<id: 1, shipping: 6.0, price: 20.0>
<id: 2, shipping: 10.0, price: 30.0>
<id: 3, shipping: 7.0, price: 12.0>
<id: 4, shipping: 5.0, price: 0.0> #0 dollars because it was updated after return
Sales
:
<id: 1, order_id: 1, price:10.0, qty:2, date: "2020-06-01T01:16:15-04:00">
<id: 2, order_id: 1, price:9.0, qty: 1, date: "2020-06-01T01:16:15-04:00">
<id: 3, order_id: 2, price:15.0, qty:2, date: "2020-06-01T01:23:53-04:00">
<id: 4, order_id: 3, price:4.0, qty: 1, date: "2020-06-01T20:28:18-04:00">
<id: 5, order_id: 3, price:4.0, qty: 2, date: "2020-06-01T20:31:15-04:00">
<id: 6, order_id: 4, price:29.0, qty:1, date: "2020-06-03T20:16:15-04:00">
Refunds
:
<id: 1, order_id: 1, qty:1, amount: 9.0, date: "2020-06-01T01:23:15-04:00">
<id: 2, order_id: 4, qty:1, amount: 29.0, date: "2020-06-04T03:34:53-04:00">
Я пишу необработанный sql, чтобы вычислить shipping
(т.е. сумму (orders.shipping)), total orders
(например, COUNT (DISTINCT orders.id)) и net sales
(т.е. sales.price * sales.qty - COALESCE (refunds.refund_amount, 0)), сгруппированные по дням. Поиск будет принимать min_date
и max_date
в формате: YYYY-MM-DDThh24:mi:ss
, чтобы отфильтровать продажи или возврат средств, выходящие за пределы диапазона дат. Проблема, с которой я столкнулся, заключается в использовании generate_series
для добавления всех дней, которых нет в таблицах, со значениями, установленными на 0. Итак, образец ответа, если min_date = 2020-06-01T00: 00: 00 и max_date = 2020-06-05T23: 59: 59 будет примерно таким:
"2020-06-01": {shipping: 6, total_orders: 3, net_sales: 62.0},
"2020-06-02": {shipping: 0, total_orders: 0, net_sales: 0}, --> newly added
"2020-06-03": {shipping: 5, total_orders: 1, net_sales: 29},
"2020-06-04": {shipping: 0, total_orders: 1, net_sales: -29.0},
"2020-06-05": {shipping: 0, total_orders: 0, net_sales: 0} --> newly added.
Может ли кто-нибудь помочь мне получить желаемые результаты выше. Я видел примеры, но не могу заставить его работать с моим сценарием. Спасибо!