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]