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

SQL联表JOIN后按created_at优先级排序并按user_name分组查询实现

SQL修改方案

你的需求核心是排序逻辑调整:第一优先级为用户最新发帖时间倒序,保证有最新帖子的用户所有内容整体排在前面;第二优先级为同一用户下单条帖子的创建时间倒序。

支持窗口函数的数据库(MySQL 8.0+/PostgreSQL/SQL Server等)实现

SELECT 
    users.name AS user_name, 
    posts.*
FROM posts
JOIN users ON users.id = posts.user_id
ORDER BY 
    -- 按每个用户的最新发帖时间倒序,决定不同用户的整体排列顺序
    MAX(posts.created_at) OVER (PARTITION BY users.id) DESC,
    -- 同一用户的帖子按创建时间倒序排列
    posts.created_at DESC;

不支持窗口函数的低版本数据库(如MySQL 5.x)实现

SELECT 
    u.name AS user_name, 
    p.*
FROM posts p
JOIN users u ON u.id = p.user_id
-- 关联获取每个用户的最新发帖时间
JOIN (
    SELECT user_id, MAX(created_at) AS latest_post_time
    FROM posts
    GROUP BY user_id
) ulp ON ulp.user_id = p.user_id
ORDER BY 
    ulp.latest_post_time DESC,
    p.created_at DESC;

小提示:原SQL中SELECT *会同时查询posts和users表的字段,若两表存在同名字段(如id)会引发冲突,建议根据实际需求明确指定需要查询的字段,避免生产环境报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:45:02