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

如何筛选routeLogTbl中合并日期时间后最新的记录ID?

解决方法:筛选合并日期时间后的最新记录ID

没问题,我来帮你搞定这个需求!核心思路是先把arrival_date和arrival_time合并成完整的datetime类型字段,再找到这个字段值最大的记录对应的ID。下面分两种常用的SQL写法来讲解,适配不同场景:

方法一:子查询匹配最大时间

这种写法直接通过子查询找到全局最大的合并时间,再关联原表获取对应的ID:

-- MySQL 写法
SELECT id
FROM routeLogTbl
WHERE STR_TO_DATE(CONCAT(arrival_date, ' ', arrival_time), '%Y-%m-%d %H:%i:%s') = (
    SELECT MAX(STR_TO_DATE(CONCAT(arrival_date, ' ', arrival_time), '%Y-%m-%d %H:%i:%s'))
    FROM routeLogTbl
)

如果是其他数据库,合并字段的语法会略有不同:

  • SQL Server:用CAST(arrival_date AS DATETIME) + CAST(arrival_time AS DATETIME)替代STR_TO_DATE(...)
  • Oracle:用TO_DATE(arrival_date || ' ' || arrival_time, 'YYYY-MM-DD HH24:MI:SS')

方法二:窗口函数(更推荐)

如果存在多条记录同时是"最新"(即合并后的时间完全相同),窗口函数可以灵活处理这种情况:

SELECT id
FROM (
    SELECT 
        id,
        -- 按合并时间倒序排名,最新的排第1
        ROW_NUMBER() OVER (ORDER BY STR_TO_DATE(CONCAT(arrival_date, ' ', arrival_time), '%Y-%m-%d %H:%i:%s') DESC) AS rn
    FROM routeLogTbl
) t
WHERE rn = 1
  • 如果允许返回所有最新的记录,把ROW_NUMBER()换成RANK()即可。

针对你的示例数据,合并后的最大时间是2018-04-05 07:00:00,对应的ID是4,用上面两种写法都能得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:40:01