如何根据最新日期从多条记录中获取特定记录

Posted

技术标签:

【中文标题】如何根据最新日期从多条记录中获取特定记录【英文标题】:How to get the specific record from multiple records based on the Latest Date 【发布时间】:2020-11-10 12:18:00 【问题描述】:

我正在尝试创建一个 SQL QUERY,它显示表中记录的最新或没有“DateOfSpecimenCollection”。下面我有两个表名为“Swab”和“ContactTracingHeader”。

SELECT  CTH.AutoID, CTH.Firstname, CTH.Lastname, SW.DateOfSpecimenCollection 
FROM ContactTracingHeader AS CTH LEFT JOIN Swab AS SW ON CTH.AutoID = SW.PatientNo
WHERE SW.DateOfSpecimenCollection = (SELECT FIRST(DateOfSpecimenCollection) 
FROM Swab ORDER BY DateOfSpecimenCollection ASC);

我要输出的是当“拭子”表中的用户输入多个相同的“PatientNo”时。它只会显示一条“PatientNo”的记录,其中包含最新的“DateOfSpecimenCollection”及其“Firstname”和“Lastname”,并且还会将“ContactTracingHeader”表中没有“DateOfSpecimenCollection”的某些患者的记录输出到“Swab”表,这也是我使用 LEFT JOIN 的原因。我很抱歉,因为我是 SQL MS ACCESS 的初学者,并且由于我的英语不好和重复的问题而导致不好的解释。提前谢谢!

这是 SQL 的可视化表示:

表 ContactTracingHeader:

|AutoID|Firstname|Lastname|
 
   1      John     Smith
   
   2      Felix    James

表拭子:

|PatientNo|DateOfSpecimenCollection|
     
      1           07/21/2020
     
      1           07/22/2020
     
      1           08/01/2020

我正在尝试进行的查询输出:

|AutoID|Firstname|Lastname|DateOfSpecimenCollection|
  
    1     John      Smith       08/01/2020
   
    2     Felix     James        (Blank)

由于“Felix James”在 Table swab 中没有任何记录,因此他的“DateOfSpecimenCollection”为空白或没有。

【问题讨论】:

更新您的问题,添加适当的数据样本和预期结果为表格文本 这能回答你的问题吗? How to get the latest record in each group using GROUP BY? 谢谢你们。 cmets 真的很有帮助,它帮助我完成了我的程序。 【参考方案1】:

您可以用子查询替换结果集中的任何列。使用它来获取最新的。您真正的查询是关于人的,因此请在您的主查询中进行选择。

SELECT  CTH.AutoID, 
        CTH.Firstname, 
        CTH.Lastname, 
        (
            SELECT MAX(DateOfSpecimenCollection)
            FROM Swab
            WHERE Swab.PatientNo = CTH.AutoID
        )  LatestDateOfSpecimenCollection
FROM ContactTracingHeader CTH

如果您只想包括拥有一个或多个拭子的患者,请添加以下内容:

WHERE EXISTS (SELECT 0 FROM Swab WHERE PatientNo = CTH.AutoID)

【讨论】:

这实际上解决了我的重复记录问题,现在我正在尝试输出最新的“DateOfSpecimenCollection”但是当我尝试WHERE SW.DateOfSpecimenCollection = (SELECT FIRST(DateOfSpecimenCollection) FROM Swab ORDER BY DateOfSpecimenCollection ASC)时它总是给我错误:你试图执行一个查询不包含指定表达式“DateOfSpecimenCollection”作为聚合函数的一部分 使用TOP 1代替FIRST,或者使用MAX

以上是关于如何根据最新日期从多条记录中获取特定记录的主要内容,如果未能解决你的问题,请参考以下文章

从多条记录中获取最大日期

如何在 Rails 中选择通过连接到另一个具有多条记录的表的最新记录

如何根据 mongoose 中嵌套 JSON 文档中数组字段的日志日期获取最新日志记录

选择日期范围,根据关闭条件计算范围内的多条记录,按班次分组

SQL Server:从最大日期/最新日期的记录中获取数据

如何获取数据列表,特定日期仅从每个日期获取 6 条记录而不是更多