SQL(MS ACCESS)基于最大值的联接表

时间:2018-10-06 13:54:44

标签: sql ms-access-2007

我正在尝试在MS ACCESS中联接表。 有问题的表是PatientDB和DailyAssessment。

PatientDB表包含主键Patient_UID。

DailyAssessment表包含主键评估_UID。 它还包含一个Patient_UID字段,该字段在数据库关系中链接到PatientDB。

我想要实现的是:

从PatientDB表中选择满足以下条件的所有记录:Patient_Active = TRUE。

对于每个活动记录,我想检索DailyAssessments表中的最新条目。 到目前为止,我已经尝试通过使用以下方法实现这一目标:

Max(Assessment_UID)作为MaxOfAssessment_UID

然后使用该值尝试联接一个查询,该查询返回DailyAssessment表中的其他值。

SQL如下所示:

SELECT PatientDB.Patient_UID, 
Max(DailyAssessment.Assessment_UID) AS 
MaxOfAssessment_UID, 
qryAssessmentData.Assessment_Date, 
qryAssessmentData.Assessment_Time, 
qryAssessmentData.Rescue_Analgesia, qryAssessmentData. 
[Review By], qryAssessmentData.Assessment_Grade, 
qryAssessmentData.Assessment_Notes
FROM (PatientDB INNER JOIN DailyAssessment ON 
PatientDB.Patient_UID = DailyAssessment.Patient_UID) 
INNER JOIN qryAssessmentData ON MaxOfAssessment_UID = 
qryAssessmentData.Assessment_UID
GROUP BY PatientDB.Patient_UID, 
qryAssessmentData.Assessment_Date, 
qryAssessmentData.Assessment_Time, 
qryAssessmentData.Rescue_Analgesia, qryAssessmentData. 
[Review By], qryAssessmentData.Assessment_Grade, 
qryAssessmentData.Assessment_Notes;

但是,我得到一个不支持JOIN表达式的错误,它突出显示了以下内容:'JOIN qryAssessmentData ON MaxOfAssessment_UID = qryAssessmentData.Assessment_UID'。

有人对实现这一目标有任何想法吗-是更简单的方法,还是我做错了什么?我对SQL有相当基本的了解,因此欢迎您提出任何建议!

非常感谢。

1 个答案:

答案 0 :(得分:0)

您不能第二次使用列别名-不在SELECTWHEREON中使用(好的,可以在ORDER BY中使用)。

您还是不希望聚合。您只需要过滤即可。

如果我理解正确,那么您需要这样的东西:

SELECT . . .
FROM PatientDB as p INNER JOIN
     DailyAssessment as da
     ON p.Patient_UID = da.Patient_UID
WHERE da.Assessment_UID = (SELECT MAX(da2.Assessment_UID)
                           FROM DailyAssessment da2
                           WHERE da2.Patient_UID = da.Patient_UID
                          );

注意:

  • 您的问题没有表明第三张桌子的用途。
  • 您的问题没有表明如何确定患者是否活跃。
  • 这引入了表别名,因此您的查询更易于编写和阅读。