CREATE TABLE books ( id int(10) unsigned NOT NULL AUTO_INCREMENT, author varchar(20) NOT NULL, book varchar(30) NOT NULL, published year(4) NOT NULL, PRIMARY KEY (id) ); INSERT INTO books (id, author, book, published) VALUES (1, 'John R. R. Tolkien', 'The Hobbit', 1937), (2, 'John R. R. Tolkien', 'The Lord of the Rings', 1955), (3, 'Terry Pratchett', 'The Colour of Magic', 1983), (4, 'Terry Pratchett', 'Equal Rites', 1987), (5, 'Terry Pratchett', 'The Truth', 2000);SELECT * FROM books GROUP BY author возвращает строки 1 и 3.
Как получить строки 2 и 5?
Похоже, у меня пятница настала раньше времени, мозги не варят. ORDER BY published DESC тут несколько неуместен, поскольку сортирует уже сгруппированные записи. Пока придумал только вот такое: SELECT * FROM books WHERE id IN (SELECT MAX(id) FROM books GROUP BY author) — это грязный хак, записи могут идти не по порядку. Да и вообще, делать вложенный запрос ради такой ерунды…
Есть идеи?
Upd.: раз уж сегодня пятница, давайте соберём побольше альтернативных решений.
Чем монстрообразнее — тем лучше :)