使用GROUP BY和ORDER BY时间戳DESC进行MySQL查询

时间:2013-08-31 13:29:38

标签: mysql group-by sql-order-by

我正在保存由user_id标识的页面的Facebook喜欢的历史记录。

现在从这张表中,我需要根据最新的timestamp得到一个代表user_id及其最新喜欢数量的集合。

我从这开始:

SELECT * 
FROM facebook_log 
GROUP BY user_id 
ORDER BY timestamp DESC;

但这不符合我的要求,因为它会返回最低timestamps的第一个记录。

我在网上读到了关于GROUP从表中返回第一批记录的内容。

我也理解了JOIN表格本身,但这也不起作用,或者我做错了。

2 个答案:

答案 0 :(得分:2)

如果您只需要user_id和时间戳,则可以执行

select f.user_id, max(f.timestamp)
from facebook_log
group by user_id;

如果你需要表格中的所有数据,你可以

select f.*
from facebook_log f
inner join (select max(timestamp) mt, user_id
            from facebook_log 
            group by user_id) m
on m.user_id = f.user_id and m.mt = f.timestamp

答案 1 :(得分:0)

你也可以通过使用这个MySQL技巧获得最新数量的喜欢:

select f.user_id, max(f.timestamp),
       substring_index(group_concat(f.numlikes order by f.timestamp desc), ',', 1) as LatestLikes
from facebook_log f
group by f.user_id;