Получение уникальных значений в sql server

#sql-server-2008

#sql-server-2008

Вопрос:

У меня есть таблица, которая говорит :

 id| AccID | Subject      | Date                       
1 | 103   | Open HOuse 1 | 11/24/2011 9:00:00 AM        
2 | 103   | Open HOuse 2 | 11/25/2011 10:00:00 AM       
3 |  72   | Open House 3 | 11/26/2011 1:10:28 AM        
4 |  82   | OPen House 4 | 11/27/2011 5:00:29 PM        
5 |  82   | OPen House 5 | 11/22/2011 5:00:29 PM   
  

Из приведенной выше таблицы мне нужны все уникальные значения для идентификатора. Но, скажем, если есть два или более столбца с одинаковым идентификатором, то мне нужен тот, у которого дата меньше (среди столбцов с одинаковым идентификатором)

Итак, из приведенной выше таблицы вывод / вывод должен быть: 1 3 5

Может кто-нибудь 1, пожалуйста, помочь мне в этом? Спасибо

Ответ №1:

 SELECT t1.*
FROM [MyTable] t1
INNER JOIN
(
    SELECT AccID, MIN(Date) Date
    FROM [MyTable]
    GROUP BY AccID
) t2 ON t1.AccID = t2.AccID AND t1.Date = t2.Date
  

Ответ №2:

Больше, чем просто случайное «но»…

 WITH SEL
AS
(
    SELECT AccID, MIN(DATE)
      FROM table
     GROUP BY AccID
)
SELECT table.*
  FROM table
  JOIN SEL ON SEL.AccID = table.AccID
  

Комментарии:

1. Разве это не должно присоединять SEL к дате и AccID? Похоже, что CTE не будет иметь никакого эффекта.