如何编写SQL查询筛选无历史记录的新Identifier条目?
问题分析
你的自连接查询逻辑是找出每个Identifier的最晚记录(筛选条件是当前条目没有更晚的同Identifier记录),所以1234的2022-08-11会被选中,这和你想要的结果不符。结合你的示例输出,你的真实需求是找出仅出现一次的Identifier对应的条目(即该Identifier没有任何历史或后续记录)。
正确SQL写法
方法一:子查询+分组统计
SELECT Identifier, Date FROM YourTable WHERE Identifier IN ( SELECT Identifier FROM YourTable GROUP BY Identifier HAVING COUNT(*) = 1 )
逻辑说明:先通过分组统计找出所有只出现一次的Identifier,再筛选这些Identifier对应的条目。
方法二:窗口函数(高效适配大数据量)
SELECT Identifier, Date FROM ( SELECT Identifier, Date, COUNT(*) OVER (PARTITION BY Identifier) AS record_count FROM YourTable ) AS subquery WHERE record_count = 1
逻辑说明:用窗口函数给每个条目标记其所属Identifier的总记录数,最终只保留总记录数为1的条目。
补充:若需筛选每个Identifier的首次出现(含后续记录的情况)
如果之后你需要的是每个Identifier的第一条记录(比如1234的2022-01-01也需被选中),可以用以下写法:
SELECT Identifier, Date FROM ( SELECT Identifier, Date, ROW_NUMBER() OVER (PARTITION BY Identifier ORDER BY Date) AS rn FROM YourTable ) AS subquery WHERE rn = 1
内容的提问来源于stack exchange,提问作者RDJ
相关产品推荐
相关产品推荐

