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

CosmosDB单次查询获取每个指定车牌对应的最新RecordedAt记录

解决方案

完全可以通过单次查询实现该需求。原查询的问题是TOP 1会对所有符合WHERE条件的记录全局排序后仅取第一条,不会按车牌分组取每个分组的最新值。

以下是两种常用实现方案:

方案1:窗口函数(兼容主流新版数据库:SQL Server、MySQL 8.0+、PostgreSQL、Oracle等)

如果需要获取最新记录的所有字段(比如Id、Plate、RecordedAt全量信息),可以用窗口函数实现:

WITH ranked_records AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY Plate ORDER BY RecordedAt DESC) AS rn
    FROM 你的实际表名
    WHERE Plate IN ('Plate1', 'Plate2', 'Plate3')
)
SELECT Plate, RecordedAt
FROM ranked_records
WHERE rn = 1;

逻辑说明:通过PARTITION BY Plate按车牌分组,每组内部按RecordedAt倒序排序,每组排名为1的就是该车牌对应的最新记录。

方案2:GROUP BY聚合(兼容旧版本MySQL等不支持窗口函数的数据库)

如果仅需要获取车牌和对应的最新时间,不需要同条记录的其他字段,直接用聚合函数加分组的写法更简单高效:

SELECT Plate, MAX(RecordedAt) AS LatestRecordedAt
FROM 你的实际表名
WHERE Plate IN ('Plate1', 'Plate2', 'Plate3')
GROUP BY Plate;

结果说明

你提供的期望返回结果中Plate1的时间存在笔误,根据示例数据,Plate1对应的最新记录时间为2021/09/26 6:53:06,最终查询返回结果如下:

PlateLatestRecordedAt
Plate12021/09/26 6:53:06
Plate22021/09/26 15:14:02
Plate32021/09/26 16:02:20

如果需要输出你示例中的JSON数组格式,可以在业务代码层对查询结果做格式转换,也可以直接调用数据库自带的JSON生成函数实现,比如SQL Server可以在查询语句末尾加FOR JSON AUTO,MySQL可以用JSON_ARRAYAGG函数生成对应格式。

内容的提问来源于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:51:02