我有 3 张桌子:
doctors (id, name) -> has_many:
patients (id, doctor_id, name) -> has_many:
health_conditions (id, patient_id, note, created_at)
每天每位患者都会添加一个健康状况,并附有从 1 到 10 的注释,其中 10 表示身体健康(如果可以的话,可以完全康复)。
我要提取的是过去 30 天(月)的以下 3 个统计数据: - 有多少患者好转 - 有多少患者病情恶化 - 有多少患者保持不变
这些统计数据是全球性的,所以我现在不关心每个医生的统计数据,我可以根据正确的查询提取这些数据。
诀窍是查询需要提取当前的 health_condition 注释并与过去几天的平均值(本月没有今天)进行比较,因此需要提取今天的注释和除此之外的其他日期的平均值。
我认为查询不需要定义谁上/下/相同,因为我可以循环并决定。我想,就在今天和本月的其余时间就足够了。
这是我到目前为止所拥有的 obv。不起作用,因为由于应用了限制,它只返回一个结果:
SELECT
p.id,
p.name,
hc.latest,
hcc.average
FROM
pacients p
INNER JOIN (
SELECT
id,
pacient_id,
note as LATEST
FROM
health_conditions
GROUP BY pacient_id, id
ORDER BY created_at DESC
LIMIT 1
) hc ON(hc.pacient_id=p.id)
INNER JOIN (
SELECT
id,
pacient_id,
avg(note) AS average
FROM
health_conditions
GROUP BY pacient_id, id
) hcc ON(hcc.pacient_id=p.id AND hcc.id!=hc.id)
WHERE
date_part('epoch',date_trunc('day', hcc.created_at))
BETWEEN
(date_part('epoch',date_trunc('day', hc.created_at)) - (30 * 86400))
AND
date_part('epoch',date_trunc('day', hc.created_at))
该查询具有区分最新和平均所需的所有逻辑,但该限制会扼杀一切。我需要该限制来提取用于与过去结果进行比较的最新结果。