查询Azure Cosmos db中不同文档的最新数据(SQL)
Query last data of different documents in Azure Cosmos db (SQL)
示例数据:
{age: 20, ts: '00:00'},
{age: 20, ts: '00:01'},
{age: 30, ts: '00:00'},
{age: 30, ts: '00:01'},
{age: 40, ts: '00:00'},
{age: 40, ts: '00:01'},
{age: 40, ts: '00:02'}
预期输出:
[{age: 20, ts: '00:01'},
{age: 30, ts: '00:01'},
{age: 40, ts: '00:02'}]
尝试过
SELECT * FROM c where c.age in (20, 30, 40) order by c.ts desc
但是结果选择了所有数据
请尝试如下操作:
SELECT max(c.ts) as ts, c.age FROM c where c.age in (20, 30, 40)
Group By c.age
这给出了以下输出:
[
{
"ts": "00:02",
"age": 40
},
{
"ts": "00:01",
"age": 30
},
{
"ts": "00:01",
"age": 20
}
]
(仅适用于大量数据)
我不会在 CosmosDb 中处理过于复杂的查询,请注意 RU 可能会非常快地飙升(以及您的每月账单)。
糟糕的是你的问题没有显示你的背景(这是为了 UI,为了报告......)。
我可能会建议使用 Cosmos 触发器来持续生成此数据。
AgesDetail (current table)
{age: 20, ts: '00:00'},
{age: 20, ts: '00:01'},
{age: 30, ts: '00:00'},
{age: 30, ts: '00:01'},
{age: 40, ts: '00:00'},
{age: 40, ts: '00:01'},
{age: 40, ts: '00:02'}
当记录被替换或添加时,更新一个新的table
AgesMax
{id: 20, ts: '00:01'},
{id: 30, ts: '00:01'},
{di: 40, ts: '00:02'}
这会缩短您的阅读时间,并且肯定会降低您的阅读量。
您还可以将此应用到您的代码层,以将消息发送到队列中以获取和转换数据。
无论如何,我认为建议仍然有效。将您的读数与真实读数分开 table 以获得更好的性能并更具成本效益。
示例数据:
{age: 20, ts: '00:00'},
{age: 20, ts: '00:01'},
{age: 30, ts: '00:00'},
{age: 30, ts: '00:01'},
{age: 40, ts: '00:00'},
{age: 40, ts: '00:01'},
{age: 40, ts: '00:02'}
预期输出:
[{age: 20, ts: '00:01'},
{age: 30, ts: '00:01'},
{age: 40, ts: '00:02'}]
尝试过
SELECT * FROM c where c.age in (20, 30, 40) order by c.ts desc
但是结果选择了所有数据
请尝试如下操作:
SELECT max(c.ts) as ts, c.age FROM c where c.age in (20, 30, 40)
Group By c.age
这给出了以下输出:
[
{
"ts": "00:02",
"age": 40
},
{
"ts": "00:01",
"age": 30
},
{
"ts": "00:01",
"age": 20
}
]
(仅适用于大量数据)
我不会在 CosmosDb 中处理过于复杂的查询,请注意 RU 可能会非常快地飙升(以及您的每月账单)。
糟糕的是你的问题没有显示你的背景(这是为了 UI,为了报告......)。
我可能会建议使用 Cosmos 触发器来持续生成此数据。
AgesDetail (current table)
{age: 20, ts: '00:00'},
{age: 20, ts: '00:01'},
{age: 30, ts: '00:00'},
{age: 30, ts: '00:01'},
{age: 40, ts: '00:00'},
{age: 40, ts: '00:01'},
{age: 40, ts: '00:02'}
当记录被替换或添加时,更新一个新的table
AgesMax
{id: 20, ts: '00:01'},
{id: 30, ts: '00:01'},
{di: 40, ts: '00:02'}
这会缩短您的阅读时间,并且肯定会降低您的阅读量。
您还可以将此应用到您的代码层,以将消息发送到队列中以获取和转换数据。
无论如何,我认为建议仍然有效。将您的读数与真实读数分开 table 以获得更好的性能并更具成本效益。