随笔 - 4  文章 - 0  评论 - 0  阅读 - 1877

Oracle将想要查询的时间点集合作为一个新表,去另一个表里只查询规定时间点的数据

最近遇到一个新需求,我们需要在一个表中选取特定时间段内一些固定时间点的数据(比如只想要取每个小时零点的数据),废物的我想不出来,让大佬教的,记录一下。

假如这个表长这样,名字就叫Table吧,需要取到每个小时零点的高度

 

TIME HEIGHT
2023-04-18 00:00:00 1
2023-04-18 01:00:00 2
2023-04-18 01:12:11 3
2023-04-18 01:43:00 4
2023-04-18 02:00:00 5

我们可以将我们想要查询的时间作为一个新表,然后联这个新表去查询当前数据库的时间,然后找出对应高度。

由开始时间和结束时间得到一个范围时间内的每小时的零点的新表,里面的字段取名叫做time_interval。

SELECT   

TRUNC(TO_DATE('2023-04-18 00:00:00', 'yyyy-mm-dd hh24:mi:ss'), 'hh24') + (LEVEL - 1) / 24 AS time_interval

FROM   DUAL   CONNECT   BY   LEVEL <= (TRUNC(TO_DATE('2023-04-18 03:00:00', 'yyyy-mm-dd hh24:mi:ss') , 'hh24') - TRUNC(TO_DATE('2023-04-18 00:00:00', 'yyyy-mm-dd hh24:mi:ss') , 'hh24')) * 24 + 1

然后用当前表联新表去一个一个查询里面的数据。

SELECT   T.HEIGHT , time_interval FROMTABLEt T  RIGHT JOIN (

SELECT   

TRUNC(TO_DATE('2023-04-18 00:00:00', 'yyyy-mm-dd hh24:mi:ss'), 'hh24') + (LEVEL - 1) / 24 AS time_interval

FROM   DUAL   CONNECT   BY   LEVEL <= (TRUNC(TO_DATE('2023-04-18 02:00:00', 'yyyy-mm-dd hh24:mi:ss') , 'hh24') - TRUNC(TO_DATE('2023-04-18 00:00:00', 'yyyy-mm-dd hh24:mi:ss') , 'hh24')) * 24 + 1

)  ON T.TIME = time_interval

这样我们就会得到一个高度与特定时间点的结果集辣!

 HEIGHT tme_interval 
 1  2023-04-18 00:00:00
 2  2023-04-18 01:00:00
 5  2023-04-18 02:00:00
posted on   不爱上班的阿鹏  阅读(88)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示