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

Azure CosmosDB中获取指定名称最新单条记录的优化查询

解决指定Name各自最新记录的查询问题

原语句的问题在于,它只是筛选出Name为A、B、C、D的所有记录后,全局按Date降序取前4条,自然会拿到全局最新的4条,而非每个指定Name各一条最新记录。以下是两种优化后的查询方案:

方案一:使用窗口函数(推荐,性能优)

适用于支持窗口函数的数据库(如MySQL 8.0+、PostgreSQL、SQL Server等):

SELECT Name, Date, `Produced Items`
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Date DESC) AS rn
    FROM c
    WHERE Name IN ('A','B','C','D')
) t
WHERE rn = 1;
  • 内层查询先筛选出目标Name的所有记录,通过PARTITION BY Name按名称分组,每个组内按Date降序排序,给每条记录标记序号rn;
  • 外层查询只保留每个组中rn=1的记录,也就是每个Name的最新一条。

方案二:关联子查询(兼容性好)

如果你的数据库版本较低不支持窗口函数,可以用这种方式:

SELECT c.*
FROM c
INNER JOIN (
    SELECT Name, MAX(Date) AS LatestDate
    FROM c
    WHERE Name IN ('A','B','C','D')
    GROUP BY Name
) t ON c.Name = t.Name AND c.Date = t.LatestDate;
  • 先通过子查询分组获取每个目标Name的最新日期;
  • 再关联原表,匹配对应Name和最新日期的记录。注意:如果同一Name在同一日期有多条记录,这个语句会返回所有符合的记录,若需唯一一条,可结合DISTINCT或其他条件调整。

性能优化建议

针对海量表,建议创建复合索引:

CREATE INDEX idx_name_date ON c (Name, Date DESC);

这个索引能让数据库快速定位到每个Name的最新记录,避免全表扫描,大幅提升查询效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:10:33