SQL,查询每天最接近指定时间的记录

Oracle 数据库的某表有一列是日期时间类型,每天对应多条数据:

|---------------------|---|
| t | d |
| 1.1.2024 08:08:08 | 1 |
| 1.1.2024 10:10:10 | 2 |
| 1.1.2024 15:15:15 | 3 |
| 1.1.2024 20:20:20 | 4 |
| 2.1.2024 09:09:09 | 5 |
| 2.1.2024 12:12:12 | 6 |
| 2.1.2024 16:16:16 | 7 |
| 12.12.2024 16:16:16 | 8 |

现在要从每天找出两条记录,一条离当天的早 8 点最近,一条离当天的晚 20 点最近。

|---------------------|---|
| t | d |
| 1.1.2024 08:08:08 | 1 |
| 1.1.2024 20:20:20 | 4 |
| 2.1.2024 09:09:09 | 5 |
| 2.1.2024 16:16:16 | 7 |
| 12.12.2024 16:16:16 | 8 |
| 12.12.2024 16:16:16 | 8 |

编写SPL代码

|---------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------|
| |  A |
| 1 | =orcl.query("select * from tb") |
| 2 | =A1.group(day(t)) |
| 3 | =A2.conj([~.minp(abs(interval@s(time("08:00:00"),time(t)))),~.minp(abs(interval@s(time("20:00:00"),time(t))))]) |

A1:通过JDBC查询数据库。

A2:按日期分组,但不汇总,以便后续处理每组数据。

A3:对每组数据,计算组内每条记录与当天8点的间隔秒数,取绝对值,求绝对值最小的那条记录;同理算出来与20点间隔秒数的绝对值最小的记录;最后合并各组的处理结果。minp函数用于计算符合条件的最小的记录。

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

SPL源码地址

免费下载试用

相关推荐
好吃的肘子几秒前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
weixin_472339469 分钟前
MySQL MCP 使用案例
数据库·mysql
lqlj22331 小时前
Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
数据库·sql·spark
遗憾皆是温柔2 小时前
MyBatis—动态 SQL
java·数据库·ide·sql·mybatis
未来之窗软件服务2 小时前
Cacti 未经身份验证SQL注入漏洞
android·数据库·sql·服务器安全
fengye2071612 小时前
在MYSQL中导入cookbook.sql文件
数据库·mysql·adb
Ailovelearning3 小时前
neo4j框架:ubuntu系统中neo4j安装与使用教程
数据库·neo4j
_星辰大海乀4 小时前
表的设计、聚合函数
java·数据结构·数据库·sql·mysql·数据库开发
未来之窗软件服务4 小时前
solidwors插件 开发————仙盟创梦IDE
前端·javascript·数据库·ide·仙盟创梦ide
yc_12244 小时前
SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。
数据库·c#