Для каждого поста вам нужно сгенерировать COUNT(likes)
, чтобы узнать, сколько лайков у него всего, а также MIN(created_on)
, чтобы узнать дату самого раннего лайка для этого поста.Сделав это, вы можете отсортировать по лайкам и дате создания:
SELECT post_id, COUNT(likes) AS likes, MIN(created_on) AS created_on
FROM post_likes
GROUP BY post_id
ORDER BY likes DESC, created_on ASC
LIMIT 1
Вывод:
post_id likes created_on
84 2 1545123998
Демо на dbfiddle
Обновление Чтобы просматривать записи сообщений только за последние 24 часа, необходимо сначала отфильтровать таблицу с помощью подзапроса, который выбирает только сообщения, понравившиеся за последние 24 часа (created_on > UNIX_TIMESTAMP() - 24 * 60 * 60)
:
SELECT post_id, COUNT(likes) AS likes, MIN(created_on) AS created_on
FROM (SELECT *
FROM post_likes
WHERE created_on > UNIX_TIMESTAMP() - 24 * 60 * 60) p
GROUP BY post_id
ORDER BY likes DESC, created_on ASC
LIMIT 1
Примечание - для ваших примеров данных ни один пост не соответствует этому критерию. demo даст вам результаты, если вы увеличите критерии до более длинного числа дней.