【问题标题】:Azure cosmos DB correlated subquery not working as expectedAzure cosmos DB 相关子查询未按预期工作
【发布时间】:2020-02-03 07:15:38
【问题描述】:

以下查询在 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]
        }
    }
]

【问题讨论】:

  • 如果您编辑问题以显示示例文档,尤其是您认为查询有效的文档,这将非常有帮助。没有任何样本数据,我认为这是无法回答的。
  • @DavidMakogon,我已经用示例数据结构编辑了这个问题。
  • 这里是什么,另一张桌子?
  • @biswpo ,'t' 是相同的 'c' 。我在上面的查询中使用了基于“域名”字段的自我加入。上面的查询正在执行,但没有获取任何记录。
  • @Balaji211 您必须使子查询单独工作。您不能在 sebquery 中使用 t

标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


【解决方案1】:

首先,您的查询 sql 与您的示例数据不匹配。我认为您在 db 中的文档如下:

{
        "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,实际上不支持。所以,我认为这里不应该使用JOIN

尝试根据时间戳从多个相同的项目中获取最近的项目 sessionId 条目。

你可能在这里需要 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]

【讨论】:

  • 似乎,在单个 sql 查询中无法满足我的要求.....
  • @Balaji211 是的,不支持单个查询。
猜你喜欢
  • 2020-07-03
  • 2019-08-11
  • 1970-01-01
  • 2016-11-19
  • 2012-11-13
  • 2011-02-27
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
相关资源
最近更新 更多