SQL查询,用于通过相应行的最小DateTime过滤列的重复行

时间:2019-01-15 09:26:29

标签: sql datetime

我有一个SQL数据库表“ Helium_Test_Data”,该表具有基于KeyID列的多个条目(KeyID代表单个测试的零件)。我需要查询条目,并且仅根据最早的创建日期时间(每个示例)每个KeyID(部分)显示一个条目(格式示例为2018-12-29 08:22:11.123)。这是因为同一部分已经过多次测试,但第一读是我需要使用的。这是当前尝试的查询:

SELECT mt.*
FROM Helium_Test_Data mt
INNER JOIN
(
    SELECT 
          KeyID, 
          MIN(DateTime) AS DateTime
      FROM Helium_Test_Data
      WHERE PSNo='11166565'
      GROUP BY KeyID
) t ON mt.KeyID = t.KeyID AND mt.DateTime = t.DateTime
  WHERE PSNo='11167197' 
  AND (mt.DateTime > '2018-12-29 07:00') 
  AND (mt.DateTime < '2018-12-29 18:00') AND OK=1 
  ORDER BY KeyId,DateTime

它仅返回表中不存在重复KeyID的行,而我需要每个单独的KeyID一行(是否重复)。对于重复的,我需要最早的日期。

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用支持大多数dbms的row_number()窗口函数

select * from 
(
 select *,row_number() over(partition by KeyID order by DateTime) rn
from Helium_Test_Data
) t where t.rn=1

或者您可以使用相关的子查询

select t1.* from Helium_Test_Data t1
where t1.DateTime= (select min(DateTime)
                   from Helium_Test_Data t2
                    where t2.KeyID=t1.KeyID
                   )