Вы можете подумать, что ваш код работает, но вы должны использовать order by
с distinct on
.С помощью order by
вы можете поставить нужного пользователя вверху, а затем:
SELECT distinct on (post_id) post_id, t.group_id, t.id, t.created_at,
(p.user_id = 100) as user_100_flag
FROM timelines t join
post_views pv
using (post_id)
WHERE t.group_id IN (1, 2, 78)
ORDER BY post_id, (p.user_id = 100)::int desc;