我有一个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一行(是否重复)。对于重复的,我需要最早的日期。
预先感谢您的帮助。
答案 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
)