为每个“组”选择最新的文档

大卫

我正在使用Azure Cosmos DB SQL API尝试实现以下目标;

我们将设备数据存储在一个集合中,并且希望有效地检索每个设备序列最新事件数据,而不必对每个设备分别进行N次查询。

SELECT * 
FROM c
WHERE c.serial IN ('V55555555','synap-aim-g1') ORDER BY c.EventEnqueuedUtcTime DESC

我假设我需要使用分组依据-https: //docs.microsoft.com/zh-cn/azure/cosmos-db/sql-query-group-by

任何帮助将不胜感激

粗略的数据示例:

[
    {
        "temperature": 25.22063251827873,
        "humidity": 71.54208429695204,
        "serial": "V55555555",
        "testid": 1,
        "location": {
            "type": "Point",
            "coordinates": [
                30.843687,
                -29.789895
            ]
        },
        "EventProcessedUtcTime": "2020-09-07T12:04:34.5861918Z",
        "PartitionId": 0,
        "EventEnqueuedUtcTime": "2020-09-07T12:04:34.4700000Z",
        "IoTHub": {
            "MessageId": null,
            "CorrelationId": null,
            "ConnectionDeviceId": "V55555555",
            "ConnectionDeviceGenerationId": "637323979596346475",
            "EnqueuedTime": "2020-09-07T12:04:34.0000000"
        },
        "Name": "admin",
        "id": "6dac491e-1f28-450d-bf97-3a15a0efaad8",
        "_rid": "i2UhAI7ofAo3AQAAAAAAAA==",
        "_self": "dbs/i2UhAA==/colls/i2UhAI7ofAo=/docs/i2UhAI7ofAo3AQAAAAAAAA==/",
        "_etag": "\"430131c1-0000-0100-0000-5f5621d80000\"",
        "_attachments": "attachments/",
        "_ts": 1599480280
    }
]

更新:因此,执行以下操作将返回正确的数据,但可悲的是,您只能返回组内或聚合函数内的数据(即不能选择*)

SELECT c.serial, MAX(c.EventProcessedUtcTime)
FROM c
WHERE c.serial IN ('V55555555','synap-aim-g1') 
GROUP BY c.serial

[
    {
        "serial": "synap-aim-g1",
        "$1": "2020-09-09T06:29:42.6812629Z"
    },
    {
        "serial": "V55555555",
        "$1": "2020-09-07T12:04:34.5861918Z"
    }
]
诺亚钢

如果问题确实是针对这种特定查询场景的有效方法,那么在查询语言本身无法提供有效解决方案的情况下,我们可以考虑使用非规范化。关于分区和建模的本指南中有一个有关获取Feed中最新项目的相关章节。

我们只需要获取100个最新帖子,而无需对整个数据集进行分页。

因此,为了优化最后一个请求,我们在设计中引入了第三个容器,该容器完全致力于满足该请求。我们将发布的信息规范化到该新的供稿容器。

按照这种方法,您可以创建一个专用于“最新”查询的“ Feed”或“ LatestEvent”容器,该容器使用设备序列作为id并具有单个分区键,以确保只有一个(最新)事件每个设备的项目,并且可以使用简单的查询通过设备序列号获取或以最低的成本列出该项目:

SELECT *
FROM c
WHERE c.serial IN ('V55555555','synap-aim-g1')

更改提要可用于更新最新事件,以便在主事件中创建最新事件时在“ LatestEvent”容器中创建/覆盖最新事件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何按号码为每个组选择最新日期?

来自分类Dev

如何使用SQL仅选择每个组中的最新组?

来自分类Dev

SQL:为每个产品选择最新销售

来自分类Dev

MYSQL-选择每个库存组的最新3条记录

来自分类Dev

Django orm为每个组获取最新信息

来自分类Dev

为SQL Server 2008中的每个主题选择最新的主题

来自分类Dev

Nhibernate分组依据-为每个外键选择最新行

来自分类Dev

MySQL-为每个帖子选择2条最新评论

来自分类Dev

为表中的每个ID选择最新的3条记录

来自分类Dev

MySQL-为每个帖子选择2条最新评论

来自分类Dev

Nhibernate分组依据-为每个外键选择最新行

来自分类Dev

为codeigniter中的每个用户选择最新记录

来自分类Dev

mysql按日期为每个用户选择最新的行

来自分类Dev

Xpath:从文档节点变量中为每个循环选择节点

来自分类Dev

在postgres表中为每个组选择随机行

来自分类Dev

MySQL-为每个日期组选择最大日期

来自分类Dev

MySQL为每个组选择最后一行

来自分类Dev

SQL Server:为结果集中的每个子组选择 Max

来自分类Dev

Mysql为每个组选择最近的2条记录[用户]

来自分类Dev

从每个组中选择

来自分类Dev

Mongodb组文档并限制每个组

来自分类Dev

加入后如何在多个列上进行区分,然后为每个组排序并选择最新的?

来自分类Dev

如何在R中的每个组中选择“ x”个最新值?

来自分类Dev

Spark Streaming group rdd by key 和 group on Paired RDDs 并从每个组中选择最新的

来自分类Dev

从用户聊天中为每个用户获取最新文档-猫鼬

来自分类Dev

从用户聊天中为每个用户获取最新文档-猫鼬

来自分类Dev

如何在MongoDB的每个组中分组和选择与max对应的文档?

来自分类Dev

选择每个设备的最新记录

来自分类Dev

为表中的每个标识符仅选择最新值

Related 相关文章

  1. 1

    如何按号码为每个组选择最新日期?

  2. 2

    如何使用SQL仅选择每个组中的最新组?

  3. 3

    SQL:为每个产品选择最新销售

  4. 4

    MYSQL-选择每个库存组的最新3条记录

  5. 5

    Django orm为每个组获取最新信息

  6. 6

    为SQL Server 2008中的每个主题选择最新的主题

  7. 7

    Nhibernate分组依据-为每个外键选择最新行

  8. 8

    MySQL-为每个帖子选择2条最新评论

  9. 9

    为表中的每个ID选择最新的3条记录

  10. 10

    MySQL-为每个帖子选择2条最新评论

  11. 11

    Nhibernate分组依据-为每个外键选择最新行

  12. 12

    为codeigniter中的每个用户选择最新记录

  13. 13

    mysql按日期为每个用户选择最新的行

  14. 14

    Xpath:从文档节点变量中为每个循环选择节点

  15. 15

    在postgres表中为每个组选择随机行

  16. 16

    MySQL-为每个日期组选择最大日期

  17. 17

    MySQL为每个组选择最后一行

  18. 18

    SQL Server:为结果集中的每个子组选择 Max

  19. 19

    Mysql为每个组选择最近的2条记录[用户]

  20. 20

    从每个组中选择

  21. 21

    Mongodb组文档并限制每个组

  22. 22

    加入后如何在多个列上进行区分,然后为每个组排序并选择最新的?

  23. 23

    如何在R中的每个组中选择“ x”个最新值?

  24. 24

    Spark Streaming group rdd by key 和 group on Paired RDDs 并从每个组中选择最新的

  25. 25

    从用户聊天中为每个用户获取最新文档-猫鼬

  26. 26

    从用户聊天中为每个用户获取最新文档-猫鼬

  27. 27

    如何在MongoDB的每个组中分组和选择与max对应的文档?

  28. 28

    选择每个设备的最新记录

  29. 29

    为表中的每个标识符仅选择最新值

热门标签

归档