我正在编写一个查询,并使用了this thread中的解决方案,它已经有点,但我仍然遇到了一些麻烦。
我想选择一大堆独特的记录,但有一些记录会出现两次。我希望只能选择具有最新日期的记录。这是我到目前为止的查询:
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 :(得分:18)
有几种方法可以做到这一点,一种方法是使用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 值的行。