MySQLにタブがあり、created_on(タイムスタンプ)に従って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つあるので、最大+最も古い投稿結果を取得したいと思います。
投稿ごとに、その投稿の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
更新過去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
注-サンプルデータの場合、この基準に一致する投稿はありません。このデモでは、基準をより長い日数に拡張した場合に結果が得られます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加