मैं समझता हूं कि आप प्रत्येक दिन के लिए चाहते हैं:
order_items.energy_used
. का योग उस दिन बनाए गए सभी आदेशों के लिएcreated_at
औरorder_sum
जो नवीनतमorder
. के अनुरूप है उस दिन बनाया गया
आपका नमूना डेटा उस का बहुत प्रतिनिधि नहीं है - इसमें प्रति दिन केवल एक आदेश है। यह भी स्पष्ट नहीं है कि created_at
. क्यों दोनों तालिकाओं में दोहराया जाता है; आपको वास्तव में order_id
. पर निर्भर होना चाहिए दोनों तालिकाओं को जोड़ने के लिए
यहाँ उपरोक्त उद्देश्य के लिए एक प्रश्न है:यह orders
. में शामिल होकर काम करता है एक समग्र क्वेरी वाली तालिका जो प्रति दिन कुल ऊर्जा की गणना करती है (order_id
. का उपयोग करके created_at
. प्राप्त करने के लिए order
. से दिनांक ), और प्रतिदिन नवीनतम ऑर्डर पर फ़िल्टर करें:
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)
)
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