Azure cosmos DB 相关子查询未按预期工作
Azure cosmos DB correlated subquery not working as expected
以下查询在 Azure Cosmos DB 中不起作用。它没有获取任何结果。任何人都可以告诉我我错过了什么地方和什么。尝试根据来自多个相同 sessionId 条目的时间戳获取最近的项目。
SELECT c.payload, c.domainname
FROM c JOIN t IN c.domainname
WHERE c.payload.sessionTimestamp =
(SELECT VALUE MAX(t.payload.sessionTimestamp) FROM t
WHERE c.payload.sessionId = t.payload.sessionId)
样本JSON结构如下
[{
"domainname": "cardiology",
"payload": {
"sessionId": "ABC1234",
"sessionTimestamp": "2020-02-04T10:14:43.507Z",
"values": [10, 20, 30, 40, 50]
}
},
{
"domainname": "cardiology",
"payload": {
"sessionId": "ABC1234",
"sessionTimestamp": "2020-02-05T10:10:43.507Z",
"values": [60, 70, 80, 90, 100]
}
}
]
首先,您的查询 sql 与您的示例不匹配 data.I 假设您在数据库中的文档如下:
{
"domainname": "cardiology",
"payload": {
"sessionId": "ABC1234",
"sessionTimestamp": "2020-02-04T10:14:43.507Z",
"values": [10, 20, 30, 40, 50]
}
},
{
"domainname": "cardiology",
"payload": {
"sessionId": "ABC1234",
"sessionTimestamp": "2020-02-05T10:10:43.507Z",
"values": [60, 70, 80, 90, 100]
}
}
看来你想用不支持的 cosmos db 实现 self-join
actually.So,我认为 JOIN
不应该在这里使用。
Trying to get recent item based on timestamp from multiple same
sessionId entries.
这里可能需要 GROUP BY。
sql:
SELECT max(c.payload.sessionTimestamp),c.payload.sessionId from c
group by c.payload.sessionId
结果:
然后你会得到 sessionId
数组,可以在下一个 sql 中使用。比如... where c.sessionId in [sessionId array]
以下查询在 Azure Cosmos DB 中不起作用。它没有获取任何结果。任何人都可以告诉我我错过了什么地方和什么。尝试根据来自多个相同 sessionId 条目的时间戳获取最近的项目。
SELECT c.payload, c.domainname
FROM c JOIN t IN c.domainname
WHERE c.payload.sessionTimestamp =
(SELECT VALUE MAX(t.payload.sessionTimestamp) FROM t
WHERE c.payload.sessionId = t.payload.sessionId)
样本JSON结构如下
[{
"domainname": "cardiology",
"payload": {
"sessionId": "ABC1234",
"sessionTimestamp": "2020-02-04T10:14:43.507Z",
"values": [10, 20, 30, 40, 50]
}
},
{
"domainname": "cardiology",
"payload": {
"sessionId": "ABC1234",
"sessionTimestamp": "2020-02-05T10:10:43.507Z",
"values": [60, 70, 80, 90, 100]
}
}
]
首先,您的查询 sql 与您的示例不匹配 data.I 假设您在数据库中的文档如下:
{
"domainname": "cardiology",
"payload": {
"sessionId": "ABC1234",
"sessionTimestamp": "2020-02-04T10:14:43.507Z",
"values": [10, 20, 30, 40, 50]
}
},
{
"domainname": "cardiology",
"payload": {
"sessionId": "ABC1234",
"sessionTimestamp": "2020-02-05T10:10:43.507Z",
"values": [60, 70, 80, 90, 100]
}
}
看来你想用不支持的 cosmos db 实现 self-join
actually.So,我认为 JOIN
不应该在这里使用。
Trying to get recent item based on timestamp from multiple same sessionId entries.
这里可能需要 GROUP BY。
sql:
SELECT max(c.payload.sessionTimestamp),c.payload.sessionId from c
group by c.payload.sessionId
结果:
然后你会得到 sessionId
数组,可以在下一个 sql 中使用。比如... where c.sessionId in [sessionId array]