Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как получить максимальные значение в SQL?

Дима Окружко Мастер (1363), на голосовании 3 года назад
Есть таблица вида
ID,NAME,VALUE

Поле VALUE - НЕ уникально
Необходимо вывести записи для каждого NAME, с самым большим ID.
Т. е.
Есть записи
1 Иванов 250
2 Петров 100
3 Иванов 100
4 Петров 500

Необходимо вывести:
3 Иванов 100
4 Петров 500
(Т. е. для каждой фамилии необходимо найти самый большой ID)
Голосование за лучший ответ
Аглая Шниц Искусственный Интеллект (145166) 3 года назад
думаю, без подзапроса не обойтись:

SELECT
  B.*
FROM
  (
  SELECT
    MAX(ID) as ID
  FROM
    Таблица
  GROUP BY
    Name
  ) A
  JOIN Таблица B ON A.ID = B.ID
Дима ОкружкоМастер (1363) 3 года назад
Даже не запустился ваш запрос.
Дима ОкружкоМастер (1363) 3 года назад
А не стоп. Оказалось HeidiSQL не понял скопированного символа переноса.
Дима ОкружкоМастер (1363) 3 года назад
Вроде работает. Спасибо.
Вячеслав Рожнев Профи (782) 3 года назад
В современных версиях баз данных проблема решается при помощи WINDOW FUNCTIONS:

SELECT
ID,
NAME,
VALUE
FROM (
SELECT
ID,
NAME,
VALUE,
ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY ID DESC) RN
FROM Users
) SortedUsers
WHERE RN = 1;

[ссылка заблокирована по решению администрации проекта]
Nikolaevich Ученик (218) 3 года назад
Можно ещё таким образом составить запрос:

with s as (
select distinct name, max(id) over (partition by name) id
from таблица
)

select s.name, s.id, t.value
from s left join таблица t on (s.name=t.name and s.id=t.id)
Похожие вопросы