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

MySQL中MAX()函数返回结果异常,如何获取用户最新位置数据?

问题分析与解决方案

你的SQL问题出在GROUP BY的使用逻辑上:当你GROUP BY tag_id后,直接选择xpos、ypos、date这些非聚合字段时,MySQL(如果是MySQL环境)在未开启ONLY_FULL_GROUP_BY模式下,会从该分组的任意一条记录中取这些字段的值,而非与MAX(date)对应的那条最新记录。这就是为什么你看到MAX(date)是最新日期,但其他字段是旧数据的原因。

下面是两种可靠的解决方案:

方案1:子查询关联(兼容所有MySQL版本)

先通过子查询获取每个tag_id的最新日期,再关联原表拿到对应位置数据:

SELECT p.tag_id, p.xpos, p.ypos, p.adsoyad, p.date
FROM `lt_position` p
INNER JOIN (
    SELECT tag_id, MAX(date) AS max_date
    FROM `lt_position`
    WHERE map_id = "750"
    GROUP BY tag_id
) latest 
    ON p.tag_id = latest.tag_id 
    AND p.date = latest.max_date
WHERE p.map_id = "750"

方案2:窗口函数(MySQL 8.0+推荐)

利用ROW_NUMBER()窗口函数给每个用户的记录按日期降序排名,取排名第一的最新记录:

SELECT tag_id, xpos, ypos, adsoyad, date
FROM (
    SELECT 
        tag_id, xpos, ypos, adsoyad, date,
        ROW_NUMBER() OVER (PARTITION BY tag_id ORDER BY date DESC) AS rn
    FROM `lt_position`
    WHERE map_id = "750"
) t
WHERE rn = 1

这两种方法都能精准获取每个用户最后一次提交的xpos和ypos数据,不会出现字段不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:03:26