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

SQL查询指定Plate列表中每个Plate对应最新1条记录的实现方法

解决方案

完全可以通过单条SQL实现需求,推荐使用窗口函数ROW_NUMBER()实现,适配SQL Server、PostgreSQL、MySQL 8.0+、Oracle等绝大多数主流数据库,示例语句如下:

SELECT ID, Plate, RecordedAt
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY Plate ORDER BY RecordedAt DESC) AS rn
    FROM 你的表名
    WHERE Plate IN ('plate1', 'plate2', 'plate3')
) t
WHERE rn = 1;

语句逻辑说明

  • 内层查询用PARTITION BY Plate将数据按Plate字段分组,每组内部按RecordedAt倒序排列,给组内每条记录生成序号rn,每组中最新的记录序号为1
  • 外层查询仅保留序号为1的记录,即可拿到每个Plate对应的最新一条记录

如果使用不支持窗口函数的旧版本数据库(例如MySQL 5.x),可以用分组关联的方式实现:

SELECT t1.*
FROM 你的表名 t1
INNER JOIN (
    SELECT Plate, MAX(RecordedAt) AS max_time
    FROM 你的表名
    WHERE Plate IN ('plate1', 'plate2', 'plate3')
    GROUP BY Plate
) t2 ON t1.Plate = t2.Plate AND t1.RecordedAt = t2.max_time
WHERE t1.Plate IN ('plate1', 'plate2', 'plate3');

注意事项

如果某个Plate存在多条RecordedAt完全相同的记录,上述第二种写法会返回该Plate所有时间一致的最新记录,若需要仅返回1条可额外增加去重逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:39:02