У меня есть две таблицы orders
и order_items
. Мне нужно сгруппировать результаты по дням.
Но мне также нужно получить за каждый день:
- 1) сумму
order_items.energy_used
для всех заказов, созданных в этот день - 2) сумма
orders.order_sum
для всех заказов, созданных в этот день - 3) последние
created_at
и order_sum
, которые соответствуют последнему заказу, созданному в этот день
Я могу получить все, кроме последней суммы order_sum
за каждый день.
Вот мой orders
стол
+----+-----------+---------+---------------------+
| id | order_sum | user_id | created_at |
+----+-----------+---------+---------------------+
| 1 | 25.13 | 7 | 2020-01-25 09:13:00 |
| 2 | 10.00 | 7 | 2020-01-25 15:23:00 |
| 3 | 14.00 | 5 | 2020-01-26 10:14:00 |
| 4 | 50.00 | 5 | 2020-01-26 19:14:00 |
| 5 | 35.00 | 1 | 2020-01-27 11:13:00 |
+----+-----------+---------+---------------------+
А вот мой order_items
table
+----+----------+-------------+---------------------+
| id | order_id | energy_used | created_at |
+----+----------+-------------+---------------------+
| 1 | 1 | 65 | 2020-01-25 09:13:00 |
| 2 | 1 | 12 | 2020-01-25 09:13:00 |
| 3 | 1 | 12 | 2020-01-25 09:13:00 |
| 4 | 2 | 70 | 2020-01-25 15:23:00 |
| 5 | 2 | 5 | 2020-01-25 15:23:00 |
| 6 | 3 | 0 | 2020-01-26 10:14:00 |
| 7 | 4 | 1 | 2020-01-26 19:14:00 |
| 8 | 5 | 5 | 2020-01-27 11:13:00 |
+----+----------+-------------+---------------------+
И это желаемый результат, которого я пытаюсь достичь
+---------------+-----------------+-------------------+---------------------+----------------+
| date_of_month | total_order_sum | total_energy_used | last_order_date | last_order_sum |
+---------------+-----------------+-------------------+---------------------+----------------+
| 2020-01-25 | 35.13 | 164 | 2020-01-25 15:23:00 | 10.00 |
| 2020-01-26 | 64.00 | 1 | 2020-01-26 19:14:00 | 50.00 |
| 2020-01-27 | 35.00 | 5 | 2020-01-27 11:13:00 | 35.00 |
+---------------+-----------------+-------------------+---------------------+----------------+
select
date(o.created_at) date_of_month,
sum(i.total_energy_used),
max(o.created_at),
sum(order_sum) as total_order_sum
from orders o
inner join (
select order_id, sum(energy_used) total_energy_used
from order_items i
group by order_id
) i on o.id = i.order_id
group by date(o.created_at)
Я попытался добавить еще одно соединение, как это, но это не сработало
inner join (
select
date(created_at) as date_of_month,
order_sum as last_order_sum
from
orders
where
created_at = (select max(created_at) from orders)
) as orders2 on orders2.date_of_month = orders.date_of_month