Использование MAX и возврат всей строки с максимальным значением столбца - PullRequest
7 голосов
/ 29 июня 2011

Я новичок в SQL и изо всех сил пытаюсь найти рабочее решение для моей ситуации MAX.

В настоящее время у меня есть таблица, которая выглядит следующим образом:

ID   Date         Version
001  2010-11-17   2
001  2010-12-01   3
002  2011-01-11   1
002  2011-05-05   2

Мой желаемый результат просто:

ID   Date        Version
001  2010-12-01  3
002  2011-05-05  2

Я не могу использовать MAX и GROUP BY на дату, так как дата не различается.

Ответы [ 3 ]

11 голосов
/ 29 июня 2011

Для этого вы можете использовать row_number, например:

select  *
from    (
        select  row_number() OVER(partition by id order by version desc) as rn
        ,       *
        from    YourTable
        ) as SubQueryAlias
where   rn = 1
9 голосов
/ 29 июня 2011

Это должно сделать работу:

SELECT     ID,
           Date,
           Version
FROM       YourTable
INNER JOIN 
(
    SELECT    ID,
              Max(Version)
    FROM      YourTable
    GROUP BY  ID
) AS x
ON         YourTable.ID = x.ID
AND        YourTable.Version = x.Version
2 голосов
/ 29 июня 2011

Для версий SQL-сервера, которые имеют оконные функции:

SELECT ID, Date, Version
FROM
  ( SELECT ID, Date, Version
         , MAX(Version) OVER(PARTITION BY ID) AS MaxVersion
    FROM yourtable
  ) AS tmp
WHERE Version = MaxVersion
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...