SQL - 当存在重复时选择最新记录

Kri*_*son 11 sql sql-server-2008

我正在编写一个查询,并且已经在这个线程中使用了解决方案并且它有些工作但我仍然遇到了一些麻烦.

我想选择一大堆独特的记录,但有一些记录会出现两次.我希望只能选择具有最新日期的记录.这是我目前的查询:

SELECT tb1.id,tb1.type,tb1.date

FROM Table tb1  

WHERE tb1.type = 'A' OR 'B'
AND tb1.date = (SELECT TOP 1 tb2.date
               FROM Table tb2  
               WHERE tb2.date = tb1.date
                ORDER BY tb2.date DESC)
Run Code Online (Sandbox Code Playgroud)

这可以检索具有重复项的那些记录的最新记录,但那些没有重复的记录根本不会出现.

感谢您的帮助,如果我错过了一些非常明显的东西,我表示歉意; 我是SQL游戏的新手.

Ada*_*Dev 19

有几种方法可以做到这一点,一种方法是像这样使用ROW_NUMBER:

SELECT id, type, date
FROM 
(
    SELECT tb1.id, tb1.type, tb1.Date, 
        ROW_NUMBER() OVER (PARTITION BY tb1.id ORDER BY tb1.Date DESC) AS RowNo
    FROM Table tb1
    WHERE tb1.type IN ('A','B')
) x
WHERE x.RowNo = 1
Run Code Online (Sandbox Code Playgroud)

这将返回具有最新Date的每个不同id值的行.