在Oracle中获取查询结果15秒间隔

Posted

技术标签:

【中文标题】在Oracle中获取查询结果15秒间隔【英文标题】:Get query result 15 second interval in Oracle 【发布时间】:2018-11-26 19:53:38 【问题描述】:

我有以下查询以获得 15 秒的间隔。但是,即使结果没有价值,我也想显示“0”值。

这是查询;

select to_char(trunc(sample_time,'hh24') + (trunc(to_char(sample_time,'mi')/1)*1)/1440 + (trunc(to_char(sample_time,'ss')/15)*15)/86400,'hh24:mi:ss') as SAMPLE_TIME,nvl(wait_class,'CPU') as waits,round(count(*)/15,2)
from gv$active_session_history
where sample_time >= sysdate-60/1440
group by wait_class,to_char(trunc(sample_time,'hh24') + (trunc(to_char(sample_time,'mi')/1)*1)/1440  + (trunc(to_char(sample_time,'ss')/15)*15)/86400,'hh24:mi:ss')
order by 1 desc,3 desc;

结果是;

SAMPLE_TIME    WAITS   COUNT
-----------------------------
14:59:30        CPU     3
14:59:00        CPU     2    
14:58:45        CPU     2
14:58:30        CPU     1
14:58:15        CPU     2
14:57:45        CPU     2

我想要的是这个;

    SAMPLE_TIME    WAITS   COUNT
    -----------------------------
    14:59:30        CPU     3
    14:59:15        CPU     0  // Added 14:59:15    
    14:59:00        CPU     2    
    14:58:45        CPU     2
    14:58:30        CPU     1
    14:58:15        CPU     2
    14:58:00        CPU     0  // Added 14:59:15
    14:57:45        CPU     2

我应该从上面的查询中改变什么?

【问题讨论】:

谢谢约翰。听起来您正在寻找日期(时间)生成。这种事情的一种常见方法是生成日期,然后将固定日期外连接到可选数据。这经常出现在堆栈溢出中,例如***.com/questions/14231374/… 或***.com/questions/29893963/… 【参考方案1】:

您可以使用如下子查询来生成最近一小时内所有日期的列表,间隔为 15 秒:

select trunc(sysdate, 'mi') - 15*level/(60*60*24) 
from dual
connect by level < 60*60/15;

在您的查询中插入:

with a as (
    select trunc(sysdate, 'mi') - 15*level/(60*60*24) as sample_time 
    from dual 
    connect by level < 60*60/15
)
select 
    a.sample_time,
    nvl(wait_class,'cpu') as waits,
    round(sum(decode(ash.wait_class, null, 0, 1))/15,2)
from a
left join gv$active_session_history ash 
    on ash.sample_time between a.sample_time and a.sample_time + 15/(60*60*24)
group by a.sample_time, wait_class
order by 1 desc,3 desc;

【讨论】:

以上是关于在Oracle中获取查询结果15秒间隔的主要内容,如果未能解决你的问题,请参考以下文章

mysql里有没有类似oracle里的ADD_MONTHS函数,自能的提取间隔的月份

如何在 Oracle SQL 上进行查询以获取时间间隔,按特定字段分组

按 15 分钟间隔对 mysql 查询进行分组

js 如何控制文本域输入内容在一定间隔时间段才触发事件查询相关数据

想请教下在oracle中如何实现获取一张表中,设定开始时间和结束时间,并且根据时间间隔来查询出来的数据。

要求:oracle数据库,按照时间间隔2分钟查询数据,结果如第一行数据是13:55的数据,第二条就是13:57的