Tôi hiểu rằng bạn muốn, cho mỗi ngày:
- tổng của
order_items.energy_used
cho tất cả các đơn đặt hàng được tạo vào ngày hôm đó -
created_at
vàorder_sum
tương ứng vớiorder
mới nhất được tạo vào ngày đó
Dữ liệu mẫu của bạn không đại diện cho điều đó - nó chỉ có một đơn đặt hàng mỗi ngày. Ngoài ra, không rõ tại sao created_at
được lặp lại trong cả hai bảng; bạn thực sự nên dựa vào order_id
liên quan đến cả hai bảng
Đây là một truy vấn cho mục đích trên:điều này hoạt động bằng cách tham gia các order
bảng có truy vấn tổng hợp tính tổng năng lượng mỗi ngày (sử dụng order_id
để lấy created_at
ngày kể từ order
), và lọc theo đơn đặt hàng mới nhất mỗi ngày:
select
date(o.created_at) date_of_month,
i.total_energy_used,
o.created_at last_order_date,
o.order_sum last_order_sum
from orders o
inner join (
select date(o1.created_at) date_of_month, sum(i1.energy_used) total_energy_used
from orders o1
inner join order_items i1 on o1.id = i1.order_id
group by date(o1.created_at)
) i on i.date_of_month = date(o.created_at)
where o.created_at = (
select max(o1.created_at)
from orders o1
where date(o1.created_at) = date(o.created_at)
)
Bản trình diễn trên DB Fiddle :
date_of_month | total_energy_used | last_order_date | last_order_sum :------------ | ----------------: | :------------------ | -------------: 2020-01-25 | 77 | 2020-01-25 09:13:00 | 25.13 2020-01-26 | 75 | 2020-01-26 10:14:00 | 14.00 2020-01-27 | 0 | 2020-01-27 11:13:00 | 35.00