SQL - выберите самую новую запись при наличии дубликата - PullRequest
10 голосов
/ 01 марта 2012

Я пишу запрос и использовал решение в этой теме , и оно сработало в некоторой степени , но у меня все еще есть небольшая проблема.

Я хочу выбрать несколько записей, которые по большей части уникальны, но есть несколько, которые встречаются дважды.Я хочу иметь возможность выбрать только запись с самой новой датой.Это мой запрос на данный момент:

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)

Это работает, поскольку он извлекает самую последнюю запись из тех записей, которые имеют дубликаты, но те записи, которые не имеют дубликатов, вообще не отображаются.1010 *

Спасибо за любую помощь, и мои извинения, если я пропустил что-то супер очевидное;Я новичок в игре SQL.

1 Ответ

18 голосов
/ 01 марта 2012

Есть несколько способов сделать это, один из них - использовать 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

Будет возвращена строка для каждого отдельного значения идентификатора с самой последней датой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...