过滤聚合函数
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
我正在使用 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