所以我得到了这样的陈述,很好:
SELECT MAX(patient_history_date_bio) AS med_date, medication_name
FROM biological
WHERE patient_id = 12)
GROUP BY medication_name但是,我也想要相应的medication_dose。所以我把这个打出来
SELECT MAX(patient_history_date_bio) AS med_date, medication_name, medication_dose
FROM biological
WHERE (patient_id = 12)
GROUP BY medication_name但是,它给了我一个错误,说:
“biological.medication_dose”在select列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。
因此,我尝试将medication_dose添加到GROUP BY子句中,但是它提供了我不想要的额外行。我想得到我桌子上每一种药物的最新一排。(最新行由max函数确定,获取最新日期)。
我该如何解决这个问题?
发布于 2010-02-28 00:30:33
使用:
SELECT b.medication_name,
b.patient_history_date_bio AS med_date,
b.medication_dose
FROM BIOLOGICAL b
JOIN (SELECT y.medication_name,
MAX(y.patient_history_date_bio) AS max_date
FROM BIOLOGICAL y
GROUP BY y.medication_name) x ON x.medication_name = b.medication_name
AND x.max_date = b.patient_history_date_bio
WHERE b.patient_id = ?发布于 2010-02-28 00:23:54
如果您真的必须这样做,作为一个快速的解决方法,您可以将聚合函数应用到您的medication_dose (如MAX(medication_dose) )。
但是,请注意,这通常表示您正在错误地构建查询,或者需要重构/规范化数据库架构。在您的示例中,看起来您处理的查询不正确。正确的方法应该是OMG Poinies in another answer建议的方法。
您可能有兴趣查阅以下有趣的文章,其中描述了此错误的原因:
发布于 2010-02-28 00:20:26
您需要将max(medication_dose)放在您的选择中。Group by返回一个结果集,该结果集包含组by子句中字段的不同值,因此显然您有多个记录具有相同的medication_name,但剂量不同,因此您将得到两个结果。
通过输入max(medication_dose),它将返回每个medication_name的最大剂量值。您可以使用任何总量函数的剂量(最大,最小,平均,和等)
https://stackoverflow.com/questions/2349500
复制相似问题