Sql 如何根据不同多个表中每个用户的最大日期获取记录
我正在尝试进行一个查询,可以选择名称、DateOfSpecimenResult、SwabResult、DateOfReleaseOfResult。以下是视觉表现: 表格:ContactTracingHeaderSql 如何根据不同多个表中每个用户的最大日期获取记录,sql,ms-access,Sql,Ms Access,我正在尝试进行一个查询,可以选择名称、DateOfSpecimenResult、SwabResult、DateOfReleaseOfResult。以下是视觉表现: 表格:ContactTracingHeader | AutoID | Name | 1 Jason 2 Chris 表:拭子 | PatientNo | DateOfSpecimenCollection | SwabResultID | DateOfReleaseOfResult |
| AutoID | Name |
1 Jason
2 Chris
表:拭子
| PatientNo | DateOfSpecimenCollection | SwabResultID | DateOfReleaseOfResult |
1 05/02/2020 1 05/10/2020
1 06/08/2020 1 06/11/2020
1 07/16/2020 2 07/20/2020
注意:ContactTracingHeader.AutoID=Swab.PatientNo
表格:SwabResult
| AutoID | SwabResult |
1 POSITIVE
2 NEGATIVE
我正在尝试进行的查询输出
| AutoID | Name | DateOfSpecimenCollection | SwabResult | DateOfReleaseOfResult |
1 Jason 07/16/2020 NEGATIVE 07/20/2020
2 Chris (BLANK) (BLANK) (BLANK)
注:Swab.ResultID=SwabResult.AutoID
在这里,我只想显示一个名称
,其中包含样本收集的最新日期
,然后将其用作另两列的参考,这两列分别是SwabResult
和DateOfReleaseOfResult
,因为“Chris”在拭子表上没有输入,他的记录为空,但他的姓名和AutoID
仍显示在表上。SwabResult
显示阴性
,或阳性
,具体取决于表拭子的ID
到目前为止,我所做的是:
SELECT
CTH.AutoID,
CTH.Firstname,
CTH.Lastname,
(SELECT MAX(DateOfSpecimenCollection)
FROM Swab
WHERE Swab.PatientNo = CTH.AutoID
) AS DateOfSpecimenCollection,
Swab.SwabResultID,
Swab.DateOfReleaseOfResult
FROM ContactTracingHeader AS CTH LEFT JOIN Swab ON Swab.PatientNo = CTH.AutoID;
此查询获取样本收集的最新日期,并输出不在拭子表中的记录,这是正确的,但是它会复制记录,具体取决于它有多少记录。我还尝试了internal JOIN
表SwabResult,以便可以输出SwabResult
而不是ID,但是它给了我JOIN表达式not supported错误
很抱歉,在我努力在互联网上寻找答案的过程中,给出了冗长而混乱的解释和重复的问题。谢谢大家! 拭子表中需要唯一标识符。如果还没有,则应使用自动编号 考虑: 问题1:
SELECT Swab.* FROM Swab WHERE ID IN
(SELECT TOP 1 ID FROM Swab AS Dupe WHERE Dupe.PatientNo=Swab.PatientNo
ORDER BY Dupe.DateOfSpecimenCollection DESC);
SELECT Swab.PatientNo, Max(Swab.DateOfSpecimenCollection) AS MaxOfDateOfSpecimenCollection
FROM Swab
GROUP BY Swab.PatientNo;
问题2
SELECT ContactTracingHeader.AutoID, ContactTracingHeader.Name, Query1.DateOfSpecimenCollection,
SwabResult.SwabResult, Query1.DateOfReleaseOfResult
FROM ContactTracingHeader LEFT JOIN (SwabResult RIGHT JOIN Query1
ON SwabResult.AutoID = Query1.SwabResultID)
ON ContactTracingHeader.AutoID = Query1.PatientNo;
或者这个序列:
问题1:
SELECT Swab.* FROM Swab WHERE ID IN
(SELECT TOP 1 ID FROM Swab AS Dupe WHERE Dupe.PatientNo=Swab.PatientNo
ORDER BY Dupe.DateOfSpecimenCollection DESC);
SELECT Swab.PatientNo, Max(Swab.DateOfSpecimenCollection) AS MaxOfDateOfSpecimenCollection
FROM Swab
GROUP BY Swab.PatientNo;
问题2:
SELECT Swab.PatientNo, Swab.DateOfSpecimenCollection, Swab.SwabResultID,
Swab.DateOfReleaseOfResult
FROM Query1 INNER JOIN Swab
ON (Query1.MaxOfDateOfSpecimenCollection = Swab.DateOfSpecimenCollection)
AND (Query1.PatientNo = Swab.PatientNo);
问题3:
SELECT ContactTracingHeader.AutoID, ContactTracingHeader.Name,
Query2.DateOfSpecimenCollection, SwabResult.SwabResult, Query2.DateOfReleaseOfResult
FROM SwabResult RIGHT JOIN (ContactTracingHeader LEFT JOIN Query2
ON ContactTracingHeader.AutoID = Query2.PatientNo)
ON SwabResult.AutoID = Query2.SwabResultID;
我知道这需要两个查询,我一直强迫自己使用一个查询。当我看到这些参数值时,我认为我得到了一些错误。非常感谢你!可以将第一个查询嵌套在第二个查询中,以获得一个多功能语句。