CREATE TABLE `user_activity` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`type` enum('request','response') DEFAULT NULL,
`data` longtext NOT NULL,
`created_at` datetime DEFAULT NULL,
`source` varchar(255) DEFAULT NULL,
`task_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
);
У меня есть эти данные: -

Теперь мне нужно выбрать все строки для user_id=527
, где значение created_at
является максимальным. Поэтому мне нужны последние 3 строки на этом изображении.
Я написал этот запрос: -
SELECT *
FROM user_activity
WHERE user_id = 527
AND source = 'E1'
AND task_name IN ( 'GetReportTask', 'StopMonitoringUserTask' )
AND created_at = (SELECT Max(created_at)
FROM user_activity
WHERE user_id = 527
AND source = 'E1'
AND task_name IN ( 'GetReportTask',
'StopMonitoringUserTask' ));
Это очень неэффективно, потому что я снова выполняю тот же запрос, что и внутренний, за исключением того, что он игнорирует created_at
. Какой правильный способ сделать это?