You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL实现按datetime降序排序并按user_id分组的查询

实现用户组聚合并按最新时间排序的SQL查询方法

要达成先按用户最新记录的时间降序确定用户组顺序,同一用户的记录聚合在一起,且组内保持时间倒序的需求,有两种常用的SQL写法:

方法一:使用窗口函数(推荐,适用于支持SQL:2003及以上的数据库,如MySQL 8+、PostgreSQL、SQL Server等)

利用窗口函数计算每个用户的最新活动时间,以此作为用户组的排序依据:

SELECT user_id, datetime, activity
FROM your_table_name
ORDER BY
    -- 按每个用户的最新时间降序排列用户组
    MAX(datetime) OVER (PARTITION BY user_id) DESC,
    user_id, -- 可选,确保同一用户的记录完全聚合,避免穿插
    -- 组内按时间降序排列
    datetime DESC;

这里MAX(datetime) OVER (PARTITION BY user_id)会为每条记录生成其所属用户的最新活动时间,排序时先按这个值倒序,就能让最新活跃的用户组排在最前面;再通过user_id确保同一用户的记录不会被拆分,最后组内按datetime倒序排列。

方法二:子查询关联(兼容不支持窗口函数的老版本数据库)

先通过子查询获取每个用户的最新时间,再关联原表完成排序:

SELECT t.user_id, t.datetime, t.activity
FROM your_table_name t
INNER JOIN (
    -- 子查询获取每个用户的最新活动时间
    SELECT user_id, MAX(datetime) AS latest_datetime
    FROM your_table_name
    GROUP BY user_id
) u ON t.user_id = u.user_id
ORDER BY
    u.latest_datetime DESC,
    t.user_id,
    t.datetime DESC;

子查询先计算出每个用户的最新时间,关联后按这个时间倒序排列用户组,再保证同一用户聚合,最后组内按时间降序排序。

内容的提问来源于stack exchange,提问作者user2268244

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:25:16