过滤聚合函数

Filtering on a aggregate function

我正在使用 Azure Cosmos DB 并尝试编写查询以按名称和版本过滤文档。我是 Cosmos 的新手,看起来我正在做的方式是对每条记录应用过滤器而不是结果本身。谁能告诉我完成此操作的正确方法:

select C.*
from c
JOIN (select MAX(c.version) from c where c.name = "test") maxVersion
where  maxVersion = c.version

示例数据:

[{"name":"test","verson":1}{"name":"test","verson":2}{"name":"test","verson":3}]

结果: 我得到了每个版本与最大版本的记录。 IE 我应该只取回一条记录,它的版本号应该是 3

当你 运行 这个 SQL:

select c,maxVersion
from c
JOIN (select MAX(c.version) from c where c.name = "test") maxVersion
    

您将获得这份文件:

    {
        "c": {
             "id": "1",
             "name": "test",
             "version": 1
         },
         "maxVersion": {
            "": 1
         }
    }
    {
        "c": {
            "id": "2",
            "name": "test",
            "version": 2
        },
        "maxVersion": {
            "": 2
        }
    },
    {
        "c": {
            "id": "3",
            "name": "test",
            "version": 3
        },
        "maxVersion": {
            "": 3
        }
    }

您的 maxVerson 等于每个文档中的 c.version,因此您将获得多个文档,而不是一个。

根据您的要求,您可以这样尝试 SQL:

SELECT TOP 1 * 
FROM c
WHERE c.name = "test"
ORDER BY c.version DESC