SQL-запрос, показывающий неверный результат - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть вкладка в MySQL, и я хочу получить наибольшее количество лайков по user_id в соответствии с созданным_ (временная отметка). Если существует более одной записи, то должен отображаться самый старый результат публикации. Вот моя таблица "post_likes"

id      post_id         likes       created_on
1       91              1           1545311881
2       82              1           1545201971
3       84              1           1545160544
4       91              1           1545146273
5       84              1           1545123998

Я пытался с помощью следующего запроса, но не работает для меня

select post_id, count(likes) 
from post_likes 
group by post_id 
ORDER BY created_on ASC LIMIT 1

, показывая мне самый старый, но с 1 как, я хочу получить максимальный + самый старый результат публикации.

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Для каждого поста вам нужно сгенерировать 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 даст вам результаты, если вы увеличите критерии до более длинного числа дней.

0 голосов
/ 24 декабря 2018

try:

SELECT post_id, count(likes), created_on
FROM
(
    SELECT * FROM post_likes Order by created_on
) as t1
group by post_id ORDER BY count(1) desc
LIMIT 1

Примечание. Если вам нужна самая старая временная метка для post_id: 91, вы должны упорядочить ее по временной метке в asc перед группировкой по.В противном случае отметка времени даст вам неопределенный результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...