Запросите отличное поле SQL с максимальной датой, возвращая все поля из таблицы - PullRequest
1 голос
/ 13 января 2011

Я с трудом пытаюсь получить запрос, который звучит просто.Я использую SQL Server 2008.

У меня есть эта таблица:

ID  Name  Date        Zone
----------------------------
01  AAA   01/01/2010  North
02  BBB   02/02/2010  South
03  AAA   05/01/2010  West 

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

ID  Name  Date        Zone
----------------------------
02  BBB   02/02/2010  South
03  AAA   05/01/2010  West 

Проблема в том, что мне нужно получить все поля из таблицы (я имею в виду: Id, Name, Date и Zone должны бытьвозвращается из запроса) после применения фильтра.

Ответы [ 3 ]

6 голосов
/ 13 января 2011

Попробуйте это:

;WITH CTETable AS
(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY Name ORDER BY [Date] DESC) ID
    FROM YourTable
)

SELECT *
FROM CTETable
WHERE ID = 1
4 голосов
/ 13 января 2011
select
  t.ID,
  t.Name,
  t.Date,
  t.Zone
from
  ThisTable t
  inner join
    (select 
      Name, 
      max(Date) as Date 
    from 
      ThisTable 
    group by 
      Name) x on x.Name = t.Name and x.Date = t.Date
2 голосов
/ 13 января 2011
SELECT a.columns
FROM table a
WHERE a.ID IN
(SELECT TOP 1 b.id FROM table b WHERE b.Name = a.Name ORDER BY b.Date DESC)

Это вернет самую последнюю строку для каждого уникального имени.

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