首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用SQL获取CosmosDB中每个项的最新记录?

如何使用SQL获取CosmosDB中每个项的最新记录?
EN

Stack Overflow用户
提问于 2020-11-06 01:38:23
回答 3查看 3.5K关注 0票数 2

我有一个类似于

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"id": "uuid",
"deviceId": "uuid",
"message": {
    "content": "string",
    "ts": 1
},
"data": {
    "temperature": 21
}

我想得到每个"deviceId".的最新“数据”(使用message.ts作为时间戳)。

到目前为止,我已经按照使用查询SELECT c.deviceId, c.message.ts, c.data FROM c ORDER BY c.message.ts DESC的时间戳顺序,设法将数据取回,但我不知道如何删除重复的设备记录。

在CosmosDB SQL引擎中可以这样做吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-09 03:40:46

多亏了Mark Brown的评论,我发现下面这个问题似乎是正确的解决方案,不像一次性使用一些SQL那样优雅,而是真正需要的。

https://learn.microsoft.com/en-us/samples/azure-samples/cosmosdb-materialized-views/real-time-view-cosomos-azure-functions/

本质上,您创建了一个由Cosmos变更提要触发的Serverless函数,并更新了一个物化视图,这个视图本质上只是一个文档,其中包含(在本例中)每个deviceId中最最新的deviceId

特别是在这种情况下,它很可能用最新的数据更新相应的device文档。

票数 0
EN

Stack Overflow用户

发布于 2021-02-19 12:07:18

您可以采取的另一种方法是在CosmosDb中使用触发器函数。这样做的好处是您不需要部署Azure函数,只需使用SQL获取最新的项。例如,当您获得一个新项时,您可以使用预触发器设置一个字段,如下所示:latest = true,同时将前一项的最新字段更改为false。然后,您的SQL查询将只需要WHERE latest = true来返回每一项的最新记录。下面是一个具有一般思想的触发器函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function setLatest() {  
    var context = getContext();  
    var request = context.getRequest();  
  
    // item to be created in the current operation  
    var itemToCreate = request.getBody();  
  
    // validate properties  
    if (!("latest" in itemToCreate)) {
        itemToCreate["latest"] = true;  
    }
    // update the old latest to false
    removeCurrentLatest(itemToCreate["id"],..., );
    // save the newer item that will be created  
    request.setBody(itemToCreate);
}

function removeCurrentLatest(id, ...) {
    var collection = getContext().getCollection();
    var collectionLink = collection.getSelfLink();
        // Get the document. We keep it in the same collection.
        var isAccepted = collection.queryDocuments
            (collectionLink, `SELECT * FROM root r WHERE r.id = "${id}" AND .... AND r.latest = true`,
            function (err, feed, options) {
            if (err) throw err;
            if (feed && feed[0] != null) 
            {
                var oldDoc = feed[0];
                oldDoc.latest = false;
                var isAccepted = collection.replaceDocument(oldDoc._self, oldDoc, function (err) {
                    if (err) throw err;
                    });
                if (!isAccepted) throw new Error("The call replaceDocument(oldDoc) returned false.");
            }
        });
        if (!isAccepted) throw new Error("The call queryDocuments for oldDoc returned false.");
    }

我删除了一些其他条件,您可能需要包括以确保您选择了正确的前一个版本的项目-希望这应该是显而易见的,如何为您的特定资产添加这些条件。这是一篇关于在CosmosDB:http://www.johndowns.co.nz/blog/2018/1/30/cosmos-db-server-side-programming-with-typescript-part-4-triggers中使用触发器的优秀文章。

票数 1
EN

Stack Overflow用户

发布于 2020-11-09 01:39:03

到目前为止,用一个SQL实现这一点是不可能的。

也许这是另一种选择。

首先,运行这个SQL SELECT c.deviceId,max(c.message.ts) as lastest FROM c group by c.deviceId

然后,您可以通过这个SQL,SELECT * FROM c WHERE c.deviceId = 'xxx' AND c.message.ts = xxxx获得数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64712120

复制
相关文章
Excel公式练习42: 统计句子中满足条件的单词个数
导语:继续研究来自于excelxor.com的案例。这个案例应用了前面分享的一些公式技巧,值得反复学习。
fanjy
2020/02/26
1.5K0
求数组满足条件个数
System.out.println("数组中大于50的有"+max+"个,小于50的有"+min+"个");
算法与编程之美
2023/01/03
3680
求数组满足条件个数
网站建设需要满足的条件
如今,网站建设随处可见。它根据现代人已经越来越离不开网络,为大家提供无线的便利。为了让人们感到更加方便,最近的移动网站正如火如荼地进行着,很多企业都察觉到了这样的趋势,所以都在努力拓展这方面的服务。但是想要做得好,就不是每个人都能做到的了。那么优秀的手机网站建设应该要满足哪些条件呢?
我的昵称_
2018/07/13
2.2K1
网站建设需要满足的条件
实现多态必须满足什么条件
3 虚函数机制 virtual mechanism 先看代码: class A { public: virtual void print() { cout<<"A.."<<endl; } }; class B : public A { public: virtual void print() { cout<<"B.."<<endl; } }; void test4() { A a1; //base B b1;//child a1 = b1;//A::operator= 对
程序员小王
2018/04/13
7780
实现多态必须满足什么条件
mysql技巧:如果记录存在则更新/如果不存在则插入的三种处理方法
新增一个员工时,如果该员工已存在(以员工号f_emp_code作为判断依据),则更新,否则插入。而且工资f_salary,更新时,不得低于原工资(即:工资只能涨,不能降)。
菩提树下的杨过
2018/12/21
9.3K0
【说站】js如何检查是否满足条件
1、every只有满足每个条件才能返回true,some是任何一个满足返回true的项目,filter过滤出所有符合条件的项目(找不到返回空)。
很酷的站长
2022/11/24
2.2K0
【说站】js如何检查是否满足条件
RestHighLevelClient批量删除满足某些条件的数据
这个可以通过DeleteByQueryRequest来实现,实例代码如下 /** * 批量删除文档 * @throws IOException */ @Test public void deleteByQueryRequest() throws IOException { DeleteByQueryRequest request = new DeleteByQueryRequest("sub_bank1031"); request.setDocTypes("sub_bank");
johnhuster的分享
2022/03/29
1.8K0
Mysql删除满足自己某个条件的表
问题描述: 自循环删除,大概意思就是删除一个表里的部分数据,这些数据所满足的条件也在自己表里 ,我有点儿晕,直接上代码,这是select出来的,正常流程,如果要删除直接改成delete from …就行了
诡途
2022/05/09
2.7K0
使用FILTER函数筛选满足多个条件的数据
其中,参数数组,是想要筛选的数据,可以是单元格区域或者数组。参数包括,指定筛选的条件,应返回TRUE,以便将其包含在查询中。参数是否为空,如果没有满足筛选条件的结果,则可以给该参数指定要返回的内容,可选。
fanjy
2023/09/15
3.6K0
使用FILTER函数筛选满足多个条件的数据
14:求满足条件的3位数
14:求满足条件的3位数 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 编写程序,按从小到大的顺序寻找同时符合条件1和2的所有3位数,条件为:  1.该数为完全平方数  2.该数至少有2位数字相同  例如,100同时满足上面两个条件。 输入输入一个数n,n的大小不超过实际满足条件的3位数的个数。输出输出为第n个满足条件的3位数(升序)样例输入 1 样例输出 100 1 #include<iostream> 2 #include<cstdio> 3 #
attack
2018/04/11
1.4K0
26:统计满足条件的4位数个数
26:统计满足条件的4位数个数 总时间限制: 1000ms 内存限制: 65536kB描述 给定若干个四位数,求出其中满足以下条件的数的个数:  个位数上的数字减去千位数上的数字,再减去百位数上的数字, 再减去十位数上的数字的结果大于零。 输入输入为两行,第一行为四位数的个数n,第二行为n个的四位数,数与数之间以一个空格分开。(n <= 100)输出输出为一行,包含一个整数,表示满足条件的四位数的个数。样例输入 5 1234 1349 6119 2123 5017 样例输出 3 来源习题
attack
2018/04/03
2.5K0
自建视频流媒体服务器需要满足哪些条件?
作为一个视频行业很多年的从业者,我结识了很多这个行业的一些大牛和小白,由于我自己是搭建视频流媒体服务器的,我发现这段时间越来越多的人问我关于视频流媒体服务器搭建的问题,当然了我也很乐意为大家解答。
EasyNVR
2020/05/20
1.9K0
PostgreSQL 如果想知道表中某个条件查询条件在索引中效率 ?
最近一直在寻找,如何不通过 select count(*) from table where 字段 = ‘值’ 类似这样的语句,大约会产生多少结果行的问题的解决方案。在一些大表存在的数据库,去不断查询某一个值在这个大表里面的行数,一直是不受欢迎的事情,最后找到了一个还算靠谱的方案。
AustinDatabases
2023/09/18
1900
PostgreSQL  如果想知道表中某个条件查询条件在索引中效率 ?
2022-12-19:大的国家。如果一个国家满足下述两个条件之一,则认为该国是 大国 :面积至少为 300 万平方公里(即,30
2022-12-19:大的国家。如果一个国家满足下述两个条件之一,则认为该国是 大国 :
福大大架构师每日一题
2023/02/01
6690
【PTA】查找满足条件的最后一个整数 (15分)
本题要求编写程序,将输入的n个整数存入数组a中,然后在数组a中查找给定的x。如果数组a中的元素与x的值相同,输出满足条件的最后一个元素的下标(下标从0开始);如果没有找到,输出“Not Found”。
Regan Yue
2021/09/16
1K0
Excel公式练习43: 统计满足多个条件的条目数量
导语:继续研究来自于excelxor.com的案例。这个案例与之前相比并不复杂,但要求公式最简。
fanjy
2020/02/29
2.5K0
在满足逻辑条件的多个相邻区域的边缘效应填充。
import matplotlib.pyplot as plt import numpy as np y = np.arange(0.0, 2, 0.01) x1 = np.sin(2 * np.pi * y) x2 = 1.3 * np.sin(4 * np.pi * y) fig, [ax1, ax2, ax3] = plt.subplots(1, 3, sharey=True, figsize=(6, 6)) ax1.fill_betweenx(y, 0, x1) ax1.set_title
裴来凡
2022/05/28
8500
在满足逻辑条件的多个相邻区域的边缘效应填充。
spring注解@Conditional 按照一定的条件进行判断,满足条件给容器中注册bean
@Conditional({}) 按照一定的条件进行判断,满足条件给容器中注册bean * 在类上使用表示,满足条件会执行这个类,如果不满足则类中所有方法都不会加载 * 在方法上使用表示,满足条件会执行这个方法
全栈程序员站长
2022/11/17
2850
问与答58: 如何用公式实现自动填入满足相应条件的数字?
A:想了半天,没有想到简单的公式。使用数组公式找到N对应的日期数不难,但是如何将找到的多个日期数连在一起却难倒了我!幸好,Excel 2016版新增了一个TEXTJOIN函数,完美解决了这个连接问题。
fanjy
2019/07/19
1.8K0
点击加载更多

相似问题

如果满足条件,则匹配整个单词

421

如果未满足条件,则排除整个页面

10

如果前面匹配的单词/数字满足条件,则继续regex

29

如果满足条件,则显示绘图

12

如果满足条件,则中断循环

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文