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

如何筛选数据表中日期最新(最大)的多行数据

筛选数据表中最新日期行的解决方案

方法1:窗口函数(推荐)

这是目前最简洁高效的方案,支持MySQL 8.0+、PostgreSQL、SQL Server等主流数据库:

WITH ranked_data AS (
    SELECT 
        *,
        -- 按分组字段划分组,每组内按日期倒序排名
        ROW_NUMBER() OVER (PARTITION BY 分组字段 ORDER BY 日期字段 DESC) AS rn
    FROM 你的主表名
)
SELECT *
FROM ranked_data
WHERE rn = 1;
  • 把分组字段换成你需要的分组列(比如用户ID、产品ID,用来确定“最新”是针对哪个维度)
  • 把日期字段替换成存储日期的列名
  • 排名为1的行就是每个分组里日期最新的记录

方法2:子查询关联(兼容旧版数据库)

如果你的数据库不支持窗口函数(比如MySQL 5.x),可以用这种方式:

SELECT t1.*
FROM 你的主表名 t1
JOIN (
    -- 先找出每个分组的最大日期
    SELECT 分组字段, MAX(日期字段) AS max_date
    FROM 你的主表名
    GROUP BY 分组字段
) t2 ON t1.分组字段 = t2.分组字段 AND t1.日期字段 = t2.max_date;

方法3:NOT EXISTS 写法

通过判断当前行是否是分组内日期最大的记录来筛选:

SELECT t1.*
FROM 你的主表名 t1
WHERE NOT EXISTS (
    SELECT 1
    FROM 你的主表名 t2
    WHERE t2.分组字段 = t1.分组字段
    AND t2.日期字段 > t1.日期字段
);

特殊情况:取整个表的最新日期行

如果不需要分组,只想拿全表日期最大的那一行,直接用下面的语句:

SELECT *
FROM 你的主表名
WHERE 日期字段 = (SELECT MAX(日期字段) FROM 你的主表名);

内容的提问来源于stack exchange,提问作者Christoper Bintang Sangjaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:46:08