कुछ इस तरह से created_at
. मानकर date
type प्रकार का है
select p.name,
hc.note as current_note,
av.avg_note
from patients p
join health_conditions hc on hc.patient_id = p.id
join (
select patient_id,
avg(note) as avg_note
from health_conditions hc2
where created_at between current_date - 30 and current_date - 1
group by patient_id
) avg on t.patient_id = hc.patient_id
where hc.created_at = current_date;
यह PostgreSQL सिंटैक्स है। मुझे यकीन नहीं है कि MySQL उसी तरह दिनांक अंकगणित का समर्थन करता है।
संपादित करें:
यह आपको प्रत्येक रोगी के लिए नवीनतम नोट, साथ ही पिछले 30 दिनों के लिए औसत प्राप्त करना चाहिए:
select p.name,
hc.created_at as last_note_date
hc.note as current_note,
t.avg_note
from patients p
join health_conditions hc
on hc.patient_id = p.id
and hc.created_at = (select max(created_at)
from health_conditions hc2
where hc2.patient_id = hc.patient_id)
join (
select patient_id,
avg(note) as avg_note
from health_conditions hc3
where created_at between current_date - 30 and current_date - 1
group by patient_id
) t on t.patient_id = hc.patient_id