我正在创建一个活动Feed,显示我的用户活动,该活动仅限于最后5行。
SELECT * FROM activity ORDER BY date desc LIMIT 5
问题是我不希望活动源在任何时候都被同一个用户混乱,所以我想检索最后5个结果,其中user_id彼此不同。
我怎么能这样做?
答案 0 :(得分:1)
这应该有效:
SELECT user_id, MAX(date) FROM activity GROUP BY user_id ORDER BY date DESC LIMIT 5
答案 1 :(得分:1)
如果每个用户没有多个max(date)
,您可以使用:
SELECT *
FROM activity
WHERE (user_id, `date`) IN (
SELECT * FROM (
SELECT user_id, max(`date`)
FROM activity
GROUP BY user_id
ORDER BY max(`date`) DESC
LIMIT 5) s
)
ORDER BY `date` DESC
请参阅小提琴here。
答案 2 :(得分:0)
我认为使用像
这样的查询会很容易SELECT DISTINCT activity.user_id,activity.* order by date DESC limit 5
Mysql不同参考:http://dev.mysql.com/doc/refman/5.1/en/distinct-optimization.html
答案 3 :(得分:0)
它可以帮助你。
SELECT * FROM activity GROUP BY user ORDER BY date DESC LIMIT 5
答案 4 :(得分:0)
尝试此查询, SELECT DISTINCT * FROM活动ORDER BY date desc LIMIT 5