一张表中按最大日期过滤重复行的 SQL 查询

标签 sql sql-server

我有一个 SQL 数据库“persons”,该数据库具有基于 IDNum 列的重复条目。我需要查询条目并仅根据最新创建日期显示行或重复条目。 这是查询:

SELECT IDNum
      ,PersonPGUID
      ,CreatedDateTime
      ,FirstName
      ,MiddleName
      ,LastName
  FROM [Persons]
  WHERE IDNum in (298928, 509520, 528203);

它返回:

IDNum   PersonPGUID                             CreatedDateTime         FirstName   MiddleName  LastName
298928  C43DEB67-EB04-4066-A374-B8369D508CF6    2007-10-22 10:13:45.000 Jonathan    McKinley    Bennett-Tisdell
298928  75B63500-7C67-4B54-A2C1-F74EAF98B861    2007-10-22 10:15:35.000 Jonathan    McKinley    Bennett-Tisdell
509520  57A1FB38-93B5-4D7B-8A17-243EC9330766    2005-02-10 11:55:13.000 Lannon      Caleb       Morgan
509520  176667F4-318E-415B-AFFC-A80348325A9D    2004-08-24 06:26:27.000 Lannon      Caleb       Morgan
528203  36C372CB-C9AD-4CEC-8553-8147C7FEDE20    2009-06-08 09:26:43.000 Pedro       Trigueros
528203  5B71C0D5-10EB-4375-8F80-E8F01381E08A    2011-12-15 10:28:11.000 Pedro       Trigueros

我需要过滤以仅显示重复项,并且它需要是每组重复项的最大日期记录。

谢谢, 威廉

最佳答案

尝试这个内部连接。它会给你带来良好的性能,因为使用了内联 View 。

SELECT [Persons].*
FROM [Persons]
INNER JOIN
(
    SELECT 
          IDNum, 
          MAX(CreatedDateTime) AS CreatedDateTime
      FROM [Persons]
      WHERE IDNum in (298928, 509520, 528203)
      GROUP BY IDNum
      HAVING COUNT(*) > 1
) latest_records
ON [Persons].IDNum = latest_records.IDNum AND [Persons].CreatedDateTime = latest_records.CreatedDateTime;

关于一张表中按最大日期过滤重复行的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23476055/

相关文章:

sql - 将 Least 与 DatePart 一起使用?

sql - 粘贴较大的多行字符串(大约1500行)后,Visual Studio 2010崩溃

java - 如何使用jooq的fetchMap返回的map?

c# - 数据库错误 : There is no row at position 0

java - Hql查询优化-返回索引id或整个对象

sql - 什么是SQL Server的文化中立日期格式

sql - 插入 INTO NOT EXISTS SQL Access

sql-server - 在travis中无法连接到docker内部的SQL Server数据库

mysql - 我怎样才能获得每个名字的最大值(value)

sql-server - 我想在 SQL Server 中执行 group_concat