2012-03-01 107 views
9

我正在写一个查询,并使用该解决方案在this thread和它一直有所但我还是有一点麻烦。SQL - 选择最新的记录时,有一个重复的

我想选择大部分独特的一堆记录,但有一些发生两次。我想只能选择具有最新日期的记录。这是迄今为止我的查询:

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) 

这个工作,只要它检索的那些有重复记录的最新记录,但那些没有重复的记录不会出现在所有。

感谢您的任何帮助,如果我错过了非常明显的东西,我的歉意;我是新来的SQL游戏。

+0

您能否提供未返回的唯一行的样本数据,以及正确的行为是否重复? – kaj 2012-03-01 11:59:40

+0

请注意,您似乎是加入日期而不是其他任何内容,例如ID。那是故意的吗? – kaj 2012-03-01 12:02:15

+0

你能更具体吗?你说:“我希望能够只选择具有最新日期的记录”和后者“,但那些没有重复记录的记录完全不会出现”......对我而言,这似乎是两回事。 – Diego 2012-03-01 12:03:29

回答

17

有几个方法可以做到这一点,一个方法是使用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 

这将返回一行具有最新日期的每个不同ID值。

+0

感谢AdaTheDev,这解决了这个问题,我已经能够完成查询没有更多的重复! – 2012-03-02 04:15:17

+0

小错字:tb2.Date应该是tb1.Date – Vladimirs 2014-09-30 16:08:54