千家信息网

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

发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,今天就跟大家聊聊有关SQL怎么在时间序列中根据字段变化分组,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。将排序(一般按时间排)后的数据按某字段
千家信息网最后更新 2025年01月25日SQL怎么在时间序列中根据字段变化分组

今天就跟大家聊聊有关SQL怎么在时间序列中根据字段变化分组,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

将排序(一般按时间排)后的数据按某字段变化分组统计,也就是分组字段值与上一行的值比较,如果相同则分到与上一行同组,不同时则创建一个新组。

这个问题用SQL来做很难!

SQL的集合是无序的,早期SQL没有相邻行引用的方法。SQL2003标准中加入了窗口函数,能引用相邻行,但分组仍然非常困难,需要用子查询人为造出分组序号。

举个例子:查询人员某段时间所处城市,并列出起始和结束时间。现有数据库表footmark数据如下:

NAMEFOOTDATECITY
Tom2020-01-02 08:30:00Beijing
Tom2020-01-03 08:30:00Beijing
Tom2020-01-04 13:30:05Beijing
Tom2020-01-04 16:36:00Chengdu
Tom2020-01-05 08:30:00Chengdu
Tom2020-01-06 12:30:00Chengdu
Tom2020-01-06 17:30:25Beijing
Tom2020-01-07 09:30:05Beijing
Tom2020-01-09 16:30:00Beijing

要求最终分组统计的结果如下:

NAMECITYSTARTDATEENDDATE
TomBeijing2020-01-02 08:30:002020-01-04 13:30:05
TomChengdu2020-01-04 16:36:002020-01-06 12:30:00
TomBeijing2020-01-06 17:30:252020-01-09 16:30:00

以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 B

GROUP BY NAME, CITY, FLAG

ORDER 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怎么在时间序列中根据字段变化分组有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

分组 数据 有序 时间 字段 变化 内容 序号 数据库 语言 序列 时间序列 一行 条件 结果 语法 问题 查询 统计 不同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全vlan之间的连接 vertica数据库导出文件 专科想学网络技术哪个学校好 供应链网络安全风险防范措施 金融科技和移动互联网 数据库怎么开放远程访问权限 淄博管理库存软件开发公司 服务器的文章 如何判断数据库插入成功 中国国防网络安全投入 软件开发学徒是真的吗 让数据库表变自由表的命令 软件开发合同告知函 学生可以学习网络安全知识吗 普陀区营销软件开发程序 轻量级服务器没有解析域名 数据库索引审查失败税控开篇 邢台市网络安全宣传 众腾网络技术服务有限公司 原神什么时候合并服务器 股票银行软件开发公司 下免费软件开发商怎么赚钱 苹果电脑qq设置代理服务器 淄博管理库存软件开发公司 服务器 万兆方案 方文数据库在线查询系统 手机游戏辅助软件开发 删除多个指定id的数据库 青海两会加强网络安全 复试数据库贴吧
0