SELECT u.id,
'Shift' AS which,
se.created_at
FROM users AS u
JOIN schedule_elements AS se ON se.owner_id = u.id
UNION ALL
(SELECT u.id,
'Like' AS which,
ll.created_at
FROM users AS u
JOIN likes AS ll ON ll.owner_id = u.id
UNION
SELECT u.id,
'Comment' AS which,
cm.created_at
FROM users AS u
JOIN comments AS cm ON cm.owner_id = u.id)
ORDER BY ID DESC , created_at DESC
The output looks like:
id, which, created_at
555, shift, <date>
555, shift, <date>
555, comment, <date>
555, shift, <date>
555, like, <date>
333, shift, <date>
333, shift, <date>
333, comment, <date>
333, shift, <date>
111, like, <date>
111, shift, <date>
111, shift, <date>
The output has 5 entries for id 555, and 4 for 333. I want to filter this query so that I only have the top 3 entries for 555, top 3 for 333, etc..