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

如何编写SQL查询获取客户编号对应最大expireDate的关联versionNumber

解决获取客户最大expireDate对应versionNumber的SQL问题

你的原查询存在逻辑问题:当GROUP BY仅指定customerNumber时,versionNumber既不是分组字段,也没有通过聚合函数处理,数据库会随机返回该分组内任意一条记录的versionNumber,这就是结果不符合预期的原因。

以下是几种可行的解决方案:

方法一:使用窗口函数(推荐,适用于MySQL 8+、PostgreSQL、SQL Server等)

通过ROW_NUMBER()窗口函数按客户分组,每组内按expireDate降序排序,取排序后的第一条记录(即expireDate最大的记录):

SELECT customerNumber, expireDate, versionNumber
FROM (
    SELECT 
        customerNumber, 
        expireDate, 
        versionNumber,
        ROW_NUMBER() OVER (PARTITION BY customerNumber ORDER BY expireDate DESC) AS rn
    FROM customers
) t
WHERE rn = 1;

如果同一客户存在多条expireDate同为最大值的记录,且需要保留所有这些记录,可以将ROW_NUMBER()替换为RANK():

SELECT customerNumber, expireDate, versionNumber
FROM (
    SELECT 
        customerNumber, 
        expireDate, 
        versionNumber,
        RANK() OVER (PARTITION BY customerNumber ORDER BY expireDate DESC) AS rn
    FROM customers
) t
WHERE rn = 1;

方法二:子查询关联(兼容低版本数据库)

先通过子查询获取每个客户的最大expireDate,再关联原表匹配对应的versionNumber:

SELECT c.customerNumber, c.expireDate, c.versionNumber
FROM customers c
INNER JOIN (
    SELECT customerNumber, MAX(expireDate) AS max_expire
    FROM customers
    GROUP BY customerNumber
) t ON c.customerNumber = t.customerNumber AND c.expireDate = t.max_expire;

此方法会返回同一客户所有expireDate等于最大值的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:55:10