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

时间:2024-12-15 07:23:49

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源码地址

免费下载试用