SQL怎么在时间序列中根据字段变化分组


今天就跟大家聊聊有关SQL怎么在时间序列中根据字段变化分组,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。将排序(一般按时间排)后的数据按某字段变化分组统计,也就是分组字段值与上一行的值比较,如果相同则分到与上一行同组,不同时则创建一个新组。这个问题用SQL来做很难!SQL的集合是无序的,早期SQL没有相邻行引用的方法。SQL2003标准中加入了窗口函数,能引用相邻行,但分组仍然非常困难,需要用子查询人为造出分组序号。举个例子:查询人员某段时间所处城市,并列出起始和结束时间。现有数据库表footmark数据如下:要求最终分组统计的结果如下:以Oracle为例,用SQL写出来是这样:WITH A AS ( SELECT NAME, FOOTDATE, CITY, CASE WHEN CITY=LAG(CITY) OVER (PARTITION BY NAME ORDER BY FOOTDATE) THEN 0 ELSE ROWNUM END FLAG FROM FOOTMARK ORDER BY NAME, FOOTDATE),B AS ( SELECT NAME, FOOTDATE, CITY, MAX(FLAG) OVER (PARTITION BY NAME ORDER BY FOOTDATE) FLAG FROM A),C AS ( SELECT NAME, CITY, FLAG,MIN(FOOTDATE) STARTDATE,MAX(FOOTDATE) ENDDATE FROM BGROUP BY NAME, CITY, FLAGORDER BY NAME, FLAG )SELECT NAME, CITY, STARTDATE, ENDDATE FROM C;这里的FLAG就是人为造出的分组序号,这种SQL既难写又难懂。对于这种按顺序分组,如果使用集算器的SPL语言就会简单很多,只需1行代 香港云主机码:connect(“mydb”).query(“SELECT * FROM FOOTMARK ORDER BY NAME,FOOTDATE”).groups@o(NAME,CITY;min(FOOTDATE):STARTDATE,max(FOOTDATE):ENDDATE)SPL基于有序集合实现,提供了按有序分组的选项@o,解决这个问题非常容易。SPL提供了等值分组、有序分组、有序条件分组、序号分组、嵌套分组、大数据有序分组、大数据有序条件分组等多种分组方式。集算器 SPL 是解决 SQL 难题的专业脚本语言,它语法简单,符合自然思维,是天然分步、层次清晰的面向过程计算语言。它采用与数据库无关的统一语法,编写的算法可在数据库间无缝迁移。它是桌面级计算工具,即装即用,配置简单,调试功能完善,可设置断点、单步执行,每步执行结果都可查看。看完上述内容,你们对SQL怎么在时间序列中根据字段变化分组有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注开发云行业资讯频道,感谢大家的支持。

相关推荐: RocketMQ事务消息怎样实现

这篇文章主要介绍RocketMQ事务消息怎样实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!RocketMQ4.3.0版本开始支持事务消息,后续分享将开始将剖析事务消息 香港云主机的实现原理。首先从官方给出的Demo实例入手,以此通往…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 10/19 16:40
下一篇 10/19 16:40

相关推荐