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

如何在SQL中筛选YYYYMM格式数值类型月份字段的最大值?

解决SQL查询最近月份记录的问题

原语句无法运行的原因是:WHERE子句中不能直接使用聚合函数MAX()——聚合函数是对整个数据集做统计计算的,而WHERE是行级筛选,执行顺序上聚合函数的计算在WHERE之后,所以无法直接在WHERE里引用MAX(MonthID)。

下面是几个简单可行的解决方案:

方案一:子查询匹配最大月份ID

这是兼容性最好的方法,几乎所有数据库都支持:

SELECT a, b
FROM data
WHERE MonthID = (SELECT MAX(MonthID) FROM data);

先通过子查询算出表中最大的MonthID,再用这个值筛选出对应月份的所有记录。

方案二:窗口函数筛选(适用于支持窗口函数的数据库)

如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server等),可以用RANK()函数标记出最近月份的记录:

SELECT a, b
FROM (
    SELECT a, b,
           RANK() OVER(ORDER BY MonthID DESC) AS rnk
    FROM data
) t
WHERE rnk = 1;

这个方法能保留所有属于最近月份的记录,还能方便扩展成查询最近N个月的需求。

方案三:排序后取前N行(适合单条记录场景)

如果确定最近月份只有一条记录,或者只需要获取任意一条最近月份的记录,可以用排序加限制行数的方式:

SELECT a, b
FROM data
ORDER BY MonthID DESC
LIMIT 1;

注意:如果最近月份有多条记录,这个方法只会返回其中一条,具体返回哪一条由数据库的排序规则决定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:15:40