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

MySQL:如何基于分组聚合获取每个用户的最新MEAL值

正确查询每个用户最新餐食的方法

你遇到的问题核心是:GROUP BY USER后,未做聚合处理的MEAL字段无法和分组后的用户关联——数据库无法确定要返回该用户的哪一条餐食记录。以下是几种可行的实现方式:

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

通过窗口函数为每个用户的记录按时间戳排序,标记出最新的那条:

SELECT USER, MEAL
FROM (
    SELECT 
        USER, 
        MEAL, 
        TIMESTAMP,
        ROW_NUMBER() OVER (PARTITION BY USER ORDER BY TIMESTAMP DESC) AS rn
    FROM MEAL_TABLE
) AS ranked
WHERE rn = 1;

这里PARTITION BY USER按用户分组,ORDER BY TIMESTAMP DESC让组内最新的记录排在最前,rn=1即可筛选出每个用户的最新餐食。

方法二:子查询+关联查询(兼容性强,几乎所有数据库都支持)

先找出每个用户的最新时间戳,再通过关联匹配对应的餐食:

SELECT mt.USER, mt.MEAL
FROM MEAL_TABLE mt
INNER JOIN (
    SELECT USER, MAX(TIMESTAMP) AS latest_ts
    FROM MEAL_TABLE
    GROUP BY USER
) AS latest ON mt.USER = latest.USER AND mt.TIMESTAMP = latest.latest_ts;

如果同一个用户在同一时间有多个餐食记录,该方法会返回多条结果;若需去重,可根据需求添加DISTINCT或额外排序逻辑。

方法三:使用LATERAL JOIN(适用于PostgreSQL、SQL Server等)

直接为每个用户获取最新的单条记录:

SELECT mt.USER, latest.MEAL
FROM (SELECT DISTINCT USER FROM MEAL_TABLE) mt
LATERAL (
    SELECT MEAL
    FROM MEAL_TABLE
    WHERE USER = mt.USER
    ORDER BY TIMESTAMP DESC
    LIMIT 1
) AS latest;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:15:35