Потратил ещё пару дней и есть ощущение, что лучше сделать невозможно, но если я не прав, предложите свой вариант, будет интересно взглянуть
SELECT dt.id, dt.created, dt.title, dt.imageIds, dt.views, dt.likesCount
FROM
(SELECT id, created, title, views, imageIds, (SELECT COUNT(*) FROM NewsLikes AS w1 WHERE dt1.id = w1.newsId) as likesCount FROM `News` dt1) dt
LEFT JOIN (SELECT id, created, (SELECT COUNT(*) FROM `NewsLikes` AS `w1` WHERE b1.id = w1.newsId) as likesCount FROM `News` b1) b
ON DATE_FORMAT(dt.created, '%Y%m%d') = DATE_FORMAT(b.created, '%Y%m%d')
AND (dt.likesCount < b.likesCount or (dt.likesCount = b.likesCount and dt.id < b.id))
WHERE b.id is NULL
ORDER BY dt.created DESC
LIMIT 5 OFFSET 0;