ORACLE中查询时间点前后一分钟的数据

我首先在ORACLE某张表中,查询大于2012年09月01日 01点00分00秒,并且最小的时间datestart。
而后用此时间点,在数据库中查询,datestart前后一分钟、(datestart+15minutes)t前后一分钟、(datestart+30minutes)t前后一分钟、(datestart+45minutes)t前后一分钟的所有数据。请问怎么实现

SELECT

表.*
FROM
表,
(
-- 这个子查询, 用于查询大于2012年09月01日 01点00分00秒,并且最小的时间datestart
SELECT
MIN( datestart ) AS datestart
FROM 表
WHERE datestart > TO_DATE( '2012090101', 'YYYYMMDDHH24' )
) MinDate
WHERE
-- datestart前后一分钟
表.datestart BETWEEN (MinDate.datestart - 1/24/60) AND (MinDate.datestart + 1/24/60)

-- 前面相同
-- datestart前后15分钟

表.datestart BETWEEN (MinDate.datestart - 15/24/60) AND (MinDate.datestart + 15/24/60)

-- 前面相同
-- datestart前后30分钟
表.datestart BETWEEN (MinDate.datestart - 30/24/60) AND (MinDate.datestart + 30/24/60)

-- 前面相同
-- datestart前后45分钟
表.datestart BETWEEN (MinDate.datestart - 45/24/60) AND (MinDate.datestart + 45/24/60)
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-05-10
你还是列举几条数据吧
并且把你想要的结果也最好做个简单的图出来,太抽象了追问



医院用的床旁监护仪,每2到3分钟分钟会往数据库发一条数据。

但是我只想看到,以监护仪接通电源后,发出的的第一条数据的时间为起始时间dtestart,

每60分钟采集4条数据。

但因为是2到3分钟间隔不等,所以并不保证起始时间后的每15分钟,都会正好有数据。

请问怎么实现

追答

譬如时间如你说的2012年09月01日 01点00分00秒
--这个是起始时间前后一分钟的所有
select * from 表名 where to_char(datestart,'yyyymmddhh24miss') between to_char(datestart-1/3600,'yyyymmddhh24miss') and to_char(datestart+1/3600,'yyyymmddhh24miss');

--15分
select * from 表名 where to_char(datestart,'yyyymmddhh24miss') between to_char(datestart+14/3600,'yyyymmddhh24miss') and to_char(datestart+16/3600,'yyyymmddhh24miss');

--半小时
select * from 表名 where to_char(datestart,'yyyymmddhh24miss') between to_char(datestart+29/3600,'yyyymmddhh24miss') and to_char(datestart+31/3600,'yyyymmddhh24miss');

--45分
select * from 表名 where to_char(datestart,'yyyymmddhh24miss') between to_char(datestart+44/3600,'yyyymmddhh24miss') and to_char(datestart+46/3600,'yyyymmddhh24miss');

是这个意思吗?

追问

差不多,但是我一查就是24小时,这么做不行的。时间点只有一个,就是不断的+15(前后1分钟)

。如果你对ORACLE时间格式很在行。麻烦把这个问题也解决了吧!http://zhidao.baidu.com/question/536315193?quesup2&oldq=1

追答

查24小时的就把这些拼起来
比如上边那四个
select ‘开始0小时0分' as 时间,* from 表名 where to_char(datestart,'yyyymmddhh24miss') between to_char(datestart-1/3600,'yyyymmddhh24miss') and to_char(datestart+1/3600,'yyyymmddhh24miss')
union all
select ‘开始0小时15分' as 时间,* from 表名 where to_char(datestart,'yyyymmddhh24miss') between to_char(datestart+14/3600,'yyyymmddhh24miss') and to_char(datestart+16/3600,'yyyymmddhh24miss')
union all
select ‘开始0小时30分' ,* from 表名 where to_char(datestart,'yyyymmddhh24miss') between to_char(datestart+29/3600,'yyyymmddhh24miss') and to_char(datestart+31/3600,'yyyymmddhh24miss')
union all
select ‘开始0小时45分' ,* from 表名 where to_char(datestart,'yyyymmddhh24miss') between to_char(datestart+44/3600,'yyyymmddhh24miss') and to_char(datestart+46/3600,'yyyymmddhh24miss');

这样就行,不过写24*4有点多,就不给你写了
后边都用union all连接起来就好

本回答被提问者和网友采纳

ORACLE中查询时间点前后一分钟的数据
-- datestart前后一分钟 表.datestart BETWEEN (MinDate.datestart - 1\/24\/60) AND (MinDate.datestart + 1\/24\/60)-- 前面相同 -- datestart前后15分钟 表.datestart BETWEEN (MinDate.datestart - 15\/24\/60) AND (MinDate.datestart + 15\/24\/60)-- 前面相同...

oracle sql 时间范围查询
此查询将选取在`sysdate`前一分钟至`sysdate`之间的所有信息。为了获得最近一个月的数据,可以结合`ADD_MONTHS`函数与`sysdate`:SELECT 字段 FROM 表名 WHERE 时间字段 BETWEEN ADD_MONTHS(SYSDATE, -1) AND SYSDATE;这将返回表名中在最近一个月内的所有数据。作为实例,要获取最近7分钟的时间范围,...

使用oracle,如何做到某个时间段内每间隔1分钟查询出一条记录?
oracle中date-date是一个浮点数,以日为单位吧 ,你拿差一分钟的两个date格式数据相减,然后使用数据循环加这个数值就可以了 总之 date+float=date date-date=float 希望你能看懂

ORACLE表中已知一个时间点,找出这个时间点后最近的那行数据
where 时间字段-已知时间= (select min(时间字段- 已知时间) from 表 where 时间字段> 已知时间)

oracle 查询时间距离当前时间的分钟数
select ceil((to_date(sysdate,'yyyy-mm-dd hh24-mi-ss')-to_date(time,'yyyy-mm-dd hh24-mi-ss')*24*60) from A 看一下你的time是什么格式的,如果不是'yyyy-mm-dd hh24-mi-ss'这种格式的 先to_char(time),再把它拼接成是'yyyy-mm-dd hh24-mi-ss'这种格式在用上面的公式 ...

oracle中的 选出一小时之前到此刻之间的数据,select语句该怎么写?_百 ...
1,比较当前时间与指定时间相差分钟数:select sysdate,sysdate - to_date('2007-04-03 13:45:39','yyyy-mm-dd hh24:mi:ss')from dual 输出结果:2007-4-4 AM 10:45:56 0.875196759259259 select sysdate,to_date('2009-2-20 17:45:39','yyyy-mm-dd hh24:mi:ss'),ROUND(TO_NUM...

oracle按时间查询数据,分段式查询怎么做?
按插入id取值select * from t where mod(to_number(id),5)=0;按时间间隔取值select * from t where mod(to_number(to_char(intime,'mi')),5)=0;

oracle数据库中,如何查询指定时间段内的记录
使用sql语句查询:select * from table1 t where t.Time between to_date('2007-03-03 18:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2007-09-04 18:00:00','yyyy-mm-dd hh24:mi:ss')

Oracle数据库查询某段时间内时间段的数据
select * from 表名 where to_date(ip_date,'yyyy.mm.dd') between to_date('20190204','yyyymmdd') and to_date('20190209','yyyymmdd') and substr(ip_time,12,8) between '00:00:00' and '08:00:00'

在oracle中如何实现查询某一时间段的数据?
select * from tab where dtcol between to_date('2012-05-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2012-05-31 00:00:00','yyyy-mm-dd hh24:mi:ss')

相似回答