Azure коррелированный подзапрос БД космоса не работает должным образом - PullRequest
1 голос
/ 03 февраля 2020

Следующий запрос не работает в 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]
        }
    }
]

1 Ответ

1 голос
/ 24 февраля 2020

Во-первых, ваш запрос sql не соответствует вашим образцам данных. Я предполагаю, что ваши документы в дБ, как показано ниже:

{
        "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]
        }
    }

Кажется, вы хотите реализовать self-join с помощью cosmos db что на самом деле не поддерживается. Так что я не думаю, что JOIN следует использовать здесь.

Попытка получить недавний элемент на основе метки времени из нескольких одинаковых записей sessionId.

Возможно, вам нужен GROUP BY здесь.

sql:

SELECT max(c.payload.sessionTimestamp),c.payload.sessionId from c
group by c.payload.sessionId

результат:

enter image description here

Тогда вы получите массив sessionId, который можно использовать в следующем sql. Такие как ... where c.sessionId in [sessionId array]

...