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

如何基于给定元组查询MySQL表中对应值的最新日期记录?

解决方案

假设你的表名为your_table,以下是两种能得到目标结果的查询方法:

方法1:关联子查询匹配最新记录

先通过子查询获取指定value对应的最大date,再关联原表拿到完整的最新记录:

SELECT t.id, t.value, t.date
FROM your_table t
INNER JOIN (
    SELECT value, MAX(date) AS max_date
    FROM your_table
    WHERE value IN ('foo', 'bar')
    GROUP BY value
) t_max ON t.value = t_max.value AND t.date = t_max.max_date
WHERE t.value IN ('foo', 'bar');

方法2:窗口函数(MySQL 8.0及以上版本可用)

利用ROW_NUMBER()窗口函数,按value分组后对date降序排序,取每组排名第一的记录:

SELECT id, value, date
FROM (
    SELECT 
        id, 
        value, 
        date,
        ROW_NUMBER() OVER (PARTITION BY value ORDER BY date DESC) AS rn
    FROM your_table
    WHERE value IN ('foo', 'bar')
) t
WHERE rn = 1;

为什么单纯用MAX(date)+GROUP BY不行?

当执行SELECT id, value, MAX(date) FROM your_table GROUP BY value时,MySQL在仅按value分组的情况下,非聚合列id会返回分组内任意一条记录的id,无法保证它和MAX(date)属于同一条数据,因此得不到你想要的结果。


你的表数据(格式化后)

idvaluedate
1foo2024-05-29 03:38:12
2foo2024-05-27 12:37:06
3xxx2024-05-29 08:17:24
4foo2024-05-27 13:45:03
5bar2024-05-28 12:56:04
6bar2024-05-29 08:36:14

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:09:51