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

获取DriverLocation表中各DriverID最新签到时间的SQL查询需求

解决DriverLocation表取每个司机最新签到时间的SQL方案

这是日常开发里很常见的分组取最值需求,我给你两种实用的写法,适配不同场景:

方法一:GROUP BY + MAX聚合函数(基础款)

如果只需要获取每个DriverID对应的最新签到时间,用这个写法最直接:

SELECT DriverID, MAX(DateTime) AS LatestSignInTime
FROM DriverLocation
GROUP BY DriverID;

原理很简单:按DriverID分组后,用MAX(DateTime)提取每组里最大的时间值(也就是最新的签到时间),刚好能得到你标注的那些需要保留的记录。

方法二:窗口函数ROW_NUMBER()(扩展款)

要是之后你的表需要新增字段(比如签到位置、设备ID等),想同时获取最新签到记录的其他信息,窗口函数的写法会更灵活:

WITH RankedDrivers AS (
    SELECT 
        DriverID,
        DateTime,
        -- 按DriverID分组,每组内按时间倒序排名
        ROW_NUMBER() OVER (PARTITION BY DriverID ORDER BY DateTime DESC) AS rn
    FROM DriverLocation
)
SELECT DriverID, DateTime AS LatestSignInTime
FROM RankedDrivers
WHERE rn = 1;

这里PARTITION BY DriverID负责按司机分组,ORDER BY DateTime DESC把每组的记录按时间从新到旧排序,ROW_NUMBER()会给每组的第一条(最新时间)标记为rn=1,最后筛选出rn=1的记录就行。

额外注意点

  • 确保DateTime字段的类型是datetime/timestamp这类时间类型,不然聚合和排序会出错;
  • 如果存在同一个司机同一时间多次签到的情况,方法一会返回一条记录(因为MAX值相同),方法二用ROW_NUMBER()会随机选一条,要是想保留所有相同的最新记录,可以把ROW_NUMBER()换成RANK()或者DENSE_RANK()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:42:03