查询根据user_id获取所有最新记录

时间:2015-04-01 01:00:38

标签: mysql greatest-n-per-group

我有一张名为photos的桌子,上面有成千上万的用户上传照片。

每个用户显然可以上传多张照片。

表架构是:

id, 
user_id, 
photo, 
date_created

我只想获取每个user_id发布的最新记录..

我试过了:

SELECT * FROM photos 
GROUP BY user_id 
ORDER BY date_created desc LIMIT 300

但这显然会带来许多奇怪的结果。

这似乎是一个简单的查询,但我已经花了数小时研究堆栈溢出和在Google上阅读这么多不同的文章,我不能为我的生活找出这个简单的查询。 / p>

4 个答案:

答案 0 :(得分:1)

这应该为您提供每个用户的最新行:

SELECT p.user_id, photo, date_created FROM photos p
JOIN (
    SELECT user_id, MAX(date_created) max_date FROM photos GROUP BY user_id
) max_dates ON p.user_id = max_dates.user_id AND p.date_created = max_dates.max_date

Sample SQL Fiddle

答案 1 :(得分:0)

select p1.user_id, p1.photo, p1.date_created 
  from photos p1  left join photos p2 
    on p1.id < p2.id and p1.user_id = p2.user_id 
  where p2.id is null

试试

修改 忘了桌子名字,我的不好。将它添加进来。也是,这里有一个小提琴:http://sqlfiddle.com/#!9/a72f6/3

答案 2 :(得分:0)

检查一下。我使用HAVING MAX(date_created)来检索当前创建/上传的记录。

SELECT user_id 
FROM photos 
GROUP BY user_id
HAVING MAX(date_created) 
ORDER BY date_created DESC LIMIT 300

答案 3 :(得分:0)

我相信你想要的是摆脱那个GROUP BY并使用常规&#39; WHERE user_id =&#39;某些东西&#39;,其余的都是正确的。

我尝试过像你这样的查询,结果只有一个记录,每个&#39; user_id&#39;,比方说。 GROUP BY通常在句子中使用WHERE ......

http://www.w3schools.com/sql/sql_groupby.asp

我希望有帮助:)如果您收到错误,请发布。