SELECT `id`, `action`, `user_id` FROM `table` a
WHERE
(SELECT MAX(b.`id`) FROM table b WHERE b.`id` < a.`id`)
!=
(SELECT MAX(c.`id`) FROM `table` c WHERE c.`action`=a.`action` AND c.`user_id` = a.`user_id` AND c.`id` < a.`id`)
Может где ошибся, или можно попроще, но идея, думаю, понятна…