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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?