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函数用于计算符合条件的最小的记录。
问题来源:https://stackoverflow.com/questions/78389189/records-closest-to-the-time
英文版 https://c.scudata.com/article/1732607085638