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

如何编写SQL查询获取基于module去重的最新created集合文档?

筛选集合中按module去重的最新版本文档

我完全get到你的需求了——你需要从集合中提取每个module对应的最新版本文档:按module属性去重,对带有created时间戳的文档,只保留该module下时间最晚的那条;没有created字段的文档则直接保留。

解决方案(以Cosmos DB SQL语法为例)

针对这种分组取最值的场景,我们可以用嵌套查询+分组关联的方式实现:

SELECT *
FROM (
    -- 内层分组:获取每个module的最新创建时间(若存在)
    SELECT 
        c.module,
        MAX(c.created) AS latestCreated
    FROM c
    GROUP BY c.module
) groupedDocs
-- 关联原集合,匹配目标文档
JOIN originalDoc IN root
WHERE 
    originalDoc.module = groupedDocs.module 
    AND (originalDoc.created = groupedDocs.latestCreated OR NOT IS_DEFINED(originalDoc.created))

查询逻辑解释

  • 内层子查询:先按module分组,用MAX(c.created)拿到每个module下的最新创建时间(仅当该module下有文档包含created字段时生效)
  • 外层关联查询:将分组结果与原集合关联,筛选出符合两个条件的文档:
    • module与分组结果一致
    • 要么文档的created等于该组的最新时间,要么文档本身没有created字段(对应示例中module2、module3这类无时间戳的文档)

针对你的示例数据的返回结果

执行上述查询后,会精准返回你想要的内容:

{"created": "2020-11-22 15:06:07.331503", "module": "module1", "md5": "ee35165603518835bd9cf", "version": "1.0"}
{"module": "module2"}
{"module": "module3"}

如果遇到同一个module下有多个文档created时间完全相同的极端情况,可以额外添加唯一标识(比如md5)的筛选条件来确保只返回一条,不过你的需求场景下上述查询已经足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:25:36