Я хочу извлечь строки группы на rls_id
, но с последним / недавним date
SELECT *
FROM `tbl_revisions`
WHERE `date` IN (SELECT MAX(`date`)
FROM `tbl_revisions`
GROUP BY `rls_id`)
GROUP BY `rls_id`
Приведенный выше запрос работает хорошо, но я не хочу использовать подзапросы. Мне нужно как-то иначе.
CREATE TABLE IF NOT EXISTS `tbl_revisions`
(
`id` int(21) NOT NULL AUTO_INCREMENT,
`rls_id` int(21) NOT NULL,
`date` datetime NOT NULL,
`user` int(21) NOT NULL,
`data` blob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=66 ;
Редактировать: Нужен более быстрый путь
Хорошо. я получил 2 рабочих запроса благодаря @Bill Karwin и @OMG Ponies.
Я вставляю Объяснение для обоих запросов здесь, чтобы другие узнали лучше
Bill Karwin :
SELECT r1.*
FROM `tbl_revisions` r1
LEFT OUTER JOIN `tbl_revisions` r2
ON (r1.`rls_id` = r2.`rls_id` AND r1.`date` < r2.`date`)
WHERE r2.`rls_id` IS NULL;
альтернативный текст http://i49.tinypic.com/x10f0i.png
OMG Ponies:
SELECT t.*
FROM TBL_REVISIONS t
JOIN (SELECT rls_id,
MAX(date) AS max_date
FROM TBL_REVISIONS
GROUP BY rls_id) x ON x.rls_id = t.rls_id
AND x.max_date = t.date
альтернативный текст http://i46.tinypic.com/2lxzdzt.png