SQL,生成指定时间间隔内的事件次序号

MSSQL 数据库某表有三个字段:账号、字符串类型的日期和时间。

|----------------|-------------------|-------------|
| Account_Number | FuelPurchase_Date | Fuel_TOD |
| 19 | 2024-04-03 | 07:02:02 AM |
| 19 | 2024-04-03 | 07:02:41 AM |
| 19 | 2024-04-03 | 02:58:49 PM |
| 19 | 2024-04-03 | 07:58:49 PM |
| 19 | 2024-04-05 | 02:58:49 PM |
| 19 | 2024-04-05 | 02:59:31 PM |
| 19 | 2024-04-17 | 11:56:13 PM |
| 20 | 2024-04-17 | 11:59:13 PM |
| 19 | 2024-04-18 | 12:15:13 AM |
| 19 | 2024-04-18 | 02:56:13 PM |
| 20 | 2024-04-18 | 07:41:55 AM |
| 20 | 2024-04-18 | 07:41:55 PM |
| 20 | 2024-04-18 | 07:56:55 PM |
| 19 | 2024-04-19 | 07:41:55 AM |
| 19 | 2024-04-19 | 07:42:20 AM |
| 19 | 2024-04-19 | 08:41:20 AM |

现在要新增一个分组的序号列 Seq,当某个账号在一个小时内发生新事件时,Seq+1;如果一个小时后才发生新事件,则重置 Seq 为 1。

|----------------|-------------------|-------------|-----|
| Account_Number | FuelPurchase_Date | Fuel_TOD | Seq |
| 19 | 2024-04-03 | 07:02:02 AM | 1 |
| 19 | 2024-04-03 | 07:02:41 AM | 2 |
| 19 | 2024-04-03 | 02:58:49 PM | 1 |
| 19 | 2024-04-03 | 07:58:49 PM | 1 |
| 19 | 2024-04-05 | 02:58:49 PM | 1 |
| 19 | 2024-04-05 | 02:59:31 PM | 2 |
| 19 | 2024-04-17 | 11:56:13 PM | 1 |
| 19 | 2024-04-18 | 12:15:13 AM | 2 |
| 19 | 2024-04-18 | 02:56:13 PM | 1 |
| 19 | 2024-04-19 | 07:41:55 AM | 1 |
| 19 | 2024-04-19 | 07:42:20 AM | 2 |
| 19 | 2024-04-19 | 08:41:20 AM | 3 |
| 20 | 2024-04-17 | 11:59:13 PM | 1 |
| 20 | 2024-04-18 | 07:41:55 AM | 1 |
| 20 | 2024-04-18 | 07:41:55 PM | 1 |
| 20 | 2024-04-18 | 07:56:55 PM | 2 |

编写SPL代码

|---|-------------------------------------------------------------------------------------------------------------------------------------------------------------|
| |  A |
| 1 | =mssql.query("select *,cast(FuelPurchase_Date as datetime) + cast(Fuel_TOD as datetime) as DT from tb order by Account_Number,DT") |
| 2 | =A1.new(Account_Number,FuelPurchase_Date,Fuel_TOD, if(Account_Number==Account_Number-1 && interval@s(Fuel_DT-1,Fuel_DT)<3600,Seq-1+1,1):Seq) |

A1:通过JDBC查询数据库,拼出日期时间类型的计算列DT,并按账号和DT排序。

A2:新建二维表,增加新计算列Seq。当前记录的账号与上一条记录相同,且时间间隔一小时内时,Seq+1;否则将Seq重置为1。-1表示相对位置的上一条记录。

SPL已开源免费,欢迎前往乾学院社区了解更多!

SPL源码地址

免费下载

相关推荐
cmes_love27 分钟前
Level 2逐笔成交历史数据下载方法笔记
数据库·笔记·oracle
swordbob1 小时前
MySQL字符集陷阱:从Oracle迁移踩坑到utf8mb4强制规范
数据库·sql
牛油果子哥q1 小时前
【C++ STL string 】C++ STL string 终极精讲:底层原理、内存机制、全套API、深浅拷贝、易错坑点与工程实战规范
数据库·c++
十五年专注C++开发1 小时前
MySql中各种功能用sql语句实现总结
数据库·sql·mysql
数据库小学妹1 小时前
AI时代数据库怎么选?多模融合、数据统一存储与选型实战指南
数据库·人工智能·经验分享·ai
Albert Edison2 小时前
【Redis】Centos7.9 安装 Redis 5 教程
数据库·redis·缓存
云计算磊哥@2 小时前
运维开发宝典026-MySQL02数据库表操作
运维·数据库·运维开发
小二·2 小时前
Redis 内存溢出(OOM)排查与恢复实战
数据库·redis·bootstrap
pqk6V6Vep2 小时前
Redis 分布式锁进阶第一篇讲解
数据库·redis·分布式
giaz14n9X2 小时前
Redis 分布式锁进阶第六十一篇
数据库·redis·分布式