как используя group by осуществить сортировку

iliah

Новичок
как используя group by осуществить сортировку

нашел только этот топик без ответа:
http://phpclub.ru/talk/showthread.php?s=&threadid=28694

вопрос в сущности тот же:
есть две таблицы
table1
[sql]CREATE TABLE `table1` (
`id` INT NOT NULL ,
PRIMARY KEY ( `id` )
);[/sql]
table2
[sql]CREATE TABLE `table2` (
`id` INT NOT NULL ,
`parent` INT NOT NULL ,
`date` DATE NOT NULL ,
PRIMARY KEY ( `id` )
);[/sql]

тестовые данные
[sql]INSERT INTO `table1` ( `id` )
VALUES (
'1'
);

INSERT INTO `table2` ( `id` , `parent` , `date` )
VALUES (
'1', '1', '2005-06-20'
), (
'2', '1', '2005-06-21'
);
[/sql]

table2.parent = table1.id

запрос
[sql]SELECT * FROM table1, table2
WHERE table1.id = table2.parent
GROUP BY table1.id[/sql]
возвращает запись с датой '2005-06-20'
в то время как требуется получить по последней (по дате - '2005-06-21') записи для каждого уникального table1.id
 

iliah

Новичок
ORDER сортирует уже полученный результат, здесь нужна "сортировка перед группировкой"
 

alexhemp

Новичок
Можно попробовать MIN или MAX :)

т.е. что-то вроде

SELECT *, MAX(table2.date), table2.id
FROM table1, table2
WHERE table1.id = table2.parent
GROUP BY table1.id

Но не знаю, вернет ли mySQL id соотв. date. Попробуйте.
 

Crazy

Developer
Автор оригинала: iliah
ORDER сортирует уже полученный результат, здесь нужна "сортировка перед группировкой"
И какова же семантика этой невиданной операции? :)))
 

camka

не самка
Есле не надо выводить все поля из таблицы 2, соответствующие записи с максимальной датой, то вполне можно обойтись вариантом, предложенным alexhemp'ом с MAX(table2.date). Иначе - без подзапроса (или временной таблицы) никак.
 
Сверху