Получить по одной записи из таблицы для каждого имени SQL

Рейтинг: 0Ответов: 1Опубликовано: 29.04.2023

введите сюда описание изображения

Есть вот такая таблица, сгруппированная и отсортированная. Теперь мне нужно для каждого левого имени оставить только самую первую строку. Т. е. в таблице со скрина должно остаться 2 строки:

avtobus mashina 2

chelovek ivanov 1

Ответы

▲ 0

Подсказка: задача состоит из двух подзадач:

  1. Выбрать уникальные имена из первой колонки.
  2. Выбрать первую запись из отсортированной таблицы для каждого такого имени.

Первая подзадача решается с помощью DISTINCT, а вторая с помощью FIRST.

UPD. Подсказки оказались так себе. Ох, и намучился я с этой штукой. Вот решение: http://www.sqlfiddle.com/#!18/d8697/17

СREATE TABLE khrntn(
Col1 varchar(55),
Col2 varchar(55),
Col3 int
);

INSERT INTO khrntn VALUES
('avtobus', 'slon', 1),
('avtobus', 'zemelya', 2),
('avtobus', 'mashina', 2),
('avtobus', 'ivanov', 1),
('chelovek', 'slon' , 1),
('chelovek', 'ivanov' , 1),
('chelovek', 'zemelya' , 1),
('chelovek', 'mashina' , 1);

Решение:

SELECT Col1 AS NCol1, MIN(Col2) AS NCol2, MCol3 AS NCol3
FROM khrntn INNER JOIN (SELECT Col1 AS MCol1, MAX(Col3) AS MCol3
    FROM khrntn
    GROUP BY Col1) AS M ON Col1=MCol1 AND Col3=MCol3
GROUP BY Col1, MCol3
ORDER BY Col1;

Результат:

NCol1 NCol2 NCol3

avtobus mashina 2

chelovek ivanov 1