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

跨表关联分组:非外键字段分组获取各项目最新反馈

解决方案

针对你的需求——按project_id分组,获取每个分组下的最新反馈记录,提供两种可行的SQL写法:

方法一:窗口函数实现(MySQL 8.0+ 适用)

利用窗口函数对每个project_id下的反馈按创建时间倒序排序,直接筛选出最新的那条:

SELECT 
    t.id AS feedback_id,
    t.created_at,
    t.entity_id,
    t.project_id
FROM (
    SELECT 
        f.id,
        f.created_at,
        e.id AS entity_id,
        e.project_id,
        ROW_NUMBER() OVER (PARTITION BY e.project_id ORDER BY f.created_at DESC) AS row_rank
    FROM feedback f
    INNER JOIN entity e ON f.entity_id = e.id
) t
WHERE t.row_rank = 1;

这个方法会给每个project_id下的反馈按created_at从新到旧编号,取编号为1的记录,确保每个分组只返回一条最新反馈(即使同时间有多条,也只会取排序后的第一条)。

方法二:子查询匹配最新时间(兼容MySQL 5.x)

如果你的数据库版本不支持窗口函数,可以先通过子查询获取每个project_id对应的最新反馈创建时间,再关联回原表拿到具体记录:

SELECT 
    f.id AS feedback_id,
    f.created_at,
    e.id AS entity_id,
    e.project_id
FROM feedback f
INNER JOIN entity e ON f.entity_id = e.id
INNER JOIN (
    SELECT 
        e.project_id,
        MAX(f.created_at) AS latest_time
    FROM feedback f
    INNER JOIN entity e ON f.entity_id = e.id
    GROUP BY e.project_id
) latest ON e.project_id = latest.project_id AND f.created_at = latest.latest_time;

注意:如果同一个project_id下存在多条反馈在同一时间创建,这个写法会返回所有这些记录。若需要唯一结果,可以在子查询中结合MAX(f.id)进一步筛选(前提是id的生成逻辑和时间顺序一致)。

说明

你原SQL中的RIGHT JOIN会包含未关联到Entity表的Feedback记录,但这类记录没有对应的project_id,不符合需求,因此改用INNER JOIN只保留有对应实体的反馈数据。

内容的提问来源于stack exchange,提问作者peter.cambal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:10:16