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

如何在MariaDB中筛选车辆部件更换的最新记录?

提取车辆部件最新更换记录的解决方案

问题背景

我有一个记录车辆部件更换历史的数据库,同一车辆的同一部件可能多次更换,需要提取每个车辆对应部件的最新更换记录及相关数据。

样本数据表

PartInstall_DateNewSerial NumberVehicle
A2023-2-17123456Bus1
A2022-12-3789101Bus1
A2021-11-4X2349Bus1
A2022-10-6XTY76Bus2
A2020-9-6X56678Bus2
B2022-6-7123456Bus1
B2020-5-3156gh6Bus1

期望输出

PartInstall_DateNewSerial NumberVehicle
A2023-2-17123456Bus1
A2022-10-6XTY76Bus2
B2022-6-7123456Bus1

可行解决方案(MariaDB环境)

方案1:窗口函数ROW_NUMBER()(推荐,MariaDB 10.2+支持)

这是最高效简洁的实现方式:

SELECT Part, Install_Date, `NewSerial Number`, Vehicle
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY Vehicle, Part 
            ORDER BY STR_TO_DATE(Install_Date, '%Y-%m-%d') DESC
        ) AS rn
    FROM your_table_name
) t
WHERE rn = 1;
  • 逻辑:PARTITION BY Vehicle, Part 按车辆+部件分组,ORDER BY Install_Date DESC 按安装日期倒序排序,ROW_NUMBER() 给每组内的记录编号,取编号为1的就是最新记录。
  • 注意:如果Install_Date字段本身是DATE/DATETIME类型,可直接用Install_Date排序,无需STR_TO_DATE转换。

方案2:JOIN+子查询(兼容低版本MariaDB)

若你的MariaDB版本低于10.2,不支持窗口函数,可使用此方案:

SELECT t1.*
FROM your_table_name t1
JOIN (
    SELECT Vehicle, Part, MAX(STR_TO_DATE(Install_Date, '%Y-%m-%d')) AS latest_date
    FROM your_table_name
    GROUP BY Vehicle, Part
) t2 
ON t1.Vehicle = t2.Vehicle 
AND t1.Part = t2.Part 
AND STR_TO_DATE(t1.Install_Date, '%Y-%m-%d') = t2.latest_date;
  • 逻辑:先通过子查询获取每个车辆-部件组合的最新安装日期,再关联原表匹配对应记录。若存在同一天更换同一部件多次的情况,会返回多条记录,需根据实际需求添加主键过滤或LIMIT限制。

注意事项

  • 替换your_table_name为你的实际数据表名。
  • 确保Install_Date的格式统一,避免日期转换错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:00:59