Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Группировка с выбором первых записей


Автор: Данкинг 6.2.2012, 21:09
Есть таблица:

ID    FIO
1     Вася
2     Вася
3     Вася
4     Вася
5     Петя
6     Петя
7     Вова
8     Вова
9     Вова
10   Миша
11   Миша

Нужно сгруппировать записи по ФИО, но чтобы для каждого ФИО взялась запись с первым ID, т.е.:
1     Вася
5     Петя
7     Вова
10   Миша

select * from table group by fio .... и что дальше?

Автор: Akina 6.2.2012, 21:33
Код

select min(id), fio
from table 
group by fio 

И забудь про звёздочку. НАВСЕГДА.

Автор: Данкинг 6.2.2012, 21:45
Так действительно логично будет, но я не сказал, что в таблице полей ещё туева хуча, и они все нужны. Их там примерно 80. Неужели все перечислять?

Добавлено через 10 минут и 19 секунд
Так если только извратиться:
Код

SELECT * from test WHERE id in (SELECT MIN(id) FROM test GROUP BY name) GROUP by name

Автор: Akina 6.2.2012, 22:56
Цитата(Данкинг @  6.2.2012,  22:45 Найти цитируемый пост)
я не сказал, что в таблице полей ещё туева хуча,

Очень зря. Потому что это совсем иная задача. Не надо упрощать, если не убеждён, что это не влияет на результат.

Цитата(Данкинг @  6.2.2012,  22:45 Найти цитируемый пост)
Неужели все перечислять?

Конечно. Это убережёт тебя как от ошибок на этапе проектирования и отладки, так и от перерасхода трафика на продакшене.
PS. И алиасы - тоже для каждого поля в любом месте запроса. Ибо у тебя используется более чем 1 таблица (и неважно, что это копии).



Автор: Данкинг 6.2.2012, 23:06
Ну, вроде на тестовой базе таким образом работает. Будем считать решённым.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)