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

如何从同表不同列获取最大日期,按TrackNo分组取对应字段值

分组查询需求实现方案

本次需求可通过窗口函数或子查询关联两种方式实现,具体写法如下:

通用写法(支持MySQL8.0+、PostgreSQL、Oracle、SQL Server等主流支持窗口函数的数据库)

WITH sorted_data AS (
    SELECT
        Accountno,
        TrackNo,
        PercentInc,
        CreateDate,
        -- 同TrackNo分组内按CreateDate倒序排序,最新的行排名为1
        ROW_NUMBER() OVER (PARTITION BY TrackNo ORDER BY STR_TO_DATE(CreateDate, '%d/%m/%Y') DESC) AS rn,
        -- 同TrackNo分组内计算最大Lastdate
        MAX(STR_TO_DATE(Lastdate, '%d/%m/%Y')) OVER (PARTITION BY TrackNo) AS group_max_lastdate
    FROM 你的表名
)
SELECT
    Accountno,
    TrackNo,
    PercentInc,
    CreateDate,
    -- 把日期转回原来的dd/mm/yyyy格式输出
    DATE_FORMAT(group_max_lastdate, '%d/%m/%Y') AS Lastdate
FROM sorted_data
WHERE rn = 1;

注意:如果你的表中CreateDate和Lastdate本身就是日期存储类型,无需使用STR_TO_DATE、DATE_FORMAT做转换,直接用字段本身排序、计算最大值即可。不同数据库的日期转换函数略有差异,PostgreSQL可替换为TO_DATE、TO_CHAR,Oracle可替换为TO_DATE、TO_CHAR。

MySQL 5.x兼容写法(无窗口函数场景)

SELECT
    a.Accountno,
    a.TrackNo,
    a.PercentInc,
    a.CreateDate,
    DATE_FORMAT(MAX(STR_TO_DATE(b.Lastdate, '%d/%m/%Y')), '%d/%m/%Y') AS Lastdate
FROM 你的表名 a
-- 关联查询每个TrackNo的最新CreateDate
INNER JOIN (
    SELECT
        TrackNo,
        MAX(STR_TO_DATE(CreateDate, '%d/%m/%Y')) AS max_cdate
    FROM 你的表名
    GROUP BY TrackNo
) c ON a.TrackNo = c.TrackNo AND STR_TO_DATE(a.CreateDate, '%d/%m/%Y') = c.max_cdate
-- 关联全表取每个分组的最大Lastdate
INNER JOIN 你的表名 b ON a.TrackNo = b.TrackNo
GROUP BY a.Accountno, a.TrackNo, a.PercentInc, a.CreateDate;

如果同一个TrackNo存在多条CreateDate完全相同的最新记录,可根据业务需要添加额外去重逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:12:02