Oracle中按照时间范围以及时间间隔抽取数据的问题
1.有一张表,里面有三个字段ID-标示,Value-值,CreateTime2.每次向表中存入17条CreateTime一样但是Value值不一样的数据,大概存了1000...
1.有一张表,里面有三个字段 ID-标示,Value-值,CreateTime
2.每次向表中存入17条CreateTime一样但是Value值不一样的数据,大概存了1000W条左右
3.目前需要一个查询语句 以时间范围和时间间隔为查询标准 取出满足条件的数据,例如:
查询时间范围为2012年10月1日 1:00 - 2012年10月1日 12:00数据中间隔时间是60秒 的所有数据! 这样查询的SQL语句应该如何写? Tks! 展开
2.每次向表中存入17条CreateTime一样但是Value值不一样的数据,大概存了1000W条左右
3.目前需要一个查询语句 以时间范围和时间间隔为查询标准 取出满足条件的数据,例如:
查询时间范围为2012年10月1日 1:00 - 2012年10月1日 12:00数据中间隔时间是60秒 的所有数据! 这样查询的SQL语句应该如何写? Tks! 展开
3个回答
展开全部
SELECT * FROM 表名 A
where a.CreateTime between to_date('2012-10-01 01:00:00','YYYY-MM-DD HH24:MI:SS')
and to_date('2012-10-01 12:00:00','YYYY-MM-DD HH24:MI:SS')
and to_char(CreateTime,'SS') = '00'
-- 秒位上数据为'00'的,这样非00秒比如05,10等其它的就过滤掉了
其它条件根据需要再加
where a.CreateTime between to_date('2012-10-01 01:00:00','YYYY-MM-DD HH24:MI:SS')
and to_date('2012-10-01 12:00:00','YYYY-MM-DD HH24:MI:SS')
and to_char(CreateTime,'SS') = '00'
-- 秒位上数据为'00'的,这样非00秒比如05,10等其它的就过滤掉了
其它条件根据需要再加
更多追问追答
追问
and to_char(CreateTime,'SS') = '00'
这个是秒位数上的 那么,怎么根据这个来求得间隔时间 进行数据抽样.. 不懂..能具体一点么!
关键是间隔时间的条件 整不来.
追答
你可以看下我标准的字符串转日期函数
字符串转日期:to_date('2012-10-01 01:00:00','YYYY-MM-DD HH24:MI:SS')
日期转字符串:to_char(sysdate,‘YYYY-MM-DD HH24:MI:SS')
SS表示秒, to_char(sysdate,'SS')得到当前的秒
像你需求里的,正好60秒一个周期, 那你限制to_char(CreateTime,'SS')='00'
就可以实现需求了,如果要半分钟一个周期,可以试试mod(to_number(to_char(CreateTime,'SS')),30)=0,mod是得除后余数的函数
展开全部
我这样理解:时间段内“整分”数据,也即秒为0的数据(CreateTime 为varchar2或date时分别如下)
select a.CreateTime
from 表 a
where extract(second from to_timestamp(a.CreateTime, 'yyyy-mm-dd hh24:mi:ss'))=0
and a.CreateTime >='2012-10-01 01:00:00' and a.CreateTime <='2012-10-01 12:00:00'
select a.CreateTime
from 表 a
where extract(second from to_timestamp(to_char(a.CreateTime,'yyyy-mm-dd hh24:mi:ss'), 'yyyy-mm-dd hh24:mi:ss'))=0
and a.CreateTime between to_date('2012-10-01 1','yyyy-mm-dd hh24:mi:ss') and to_date('2012-10-01 12','yyyy-mm-dd hh24:mi:ss')
select a.CreateTime
from 表 a
where extract(second from to_timestamp(a.CreateTime, 'yyyy-mm-dd hh24:mi:ss'))=0
and a.CreateTime >='2012-10-01 01:00:00' and a.CreateTime <='2012-10-01 12:00:00'
select a.CreateTime
from 表 a
where extract(second from to_timestamp(to_char(a.CreateTime,'yyyy-mm-dd hh24:mi:ss'), 'yyyy-mm-dd hh24:mi:ss'))=0
and a.CreateTime between to_date('2012-10-01 1','yyyy-mm-dd hh24:mi:ss') and to_date('2012-10-01 12','yyyy-mm-dd hh24:mi:ss')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里TT是指定的时间间隔,单位:秒 下面语句可查出任意给定时间间隔的所有记录。
select * from tab
where CreateTime between to_date('2012-10-01 01:00:00','yyyy-mm-dd hh24:mi:ss') and
to_date('2012-10-01 12:00:00','yyyy-mm-dd hh24:mi:ss') and
CreateTime in (select to_date('2012-10-01 01:00:00','yyyy-mm-dd hh24:mi:ss')
+TT*rownum/24/60/60 from dual
CONNECT BY rownum<=
(to_date('2012-10-01 12:00:00','yyyy-mm-dd hh24:mi:ss')-
to_date('2012-10-01 01:00:00','yyyy-mm-dd hh24:mi:ss'))*24*60*60/TT);
在上面的语句中,下列部分是构造时间间隔的所有可能存在的记录。每TT秒一条记录。
(select to_date('2012-10-01 01:00:00','yyyy-mm-dd hh24:mi:ss') +TT*rownum/24/60/60
from dual CONNECT BY rownum<=
(to_date('2012-10-01 12:00:00','yyyy-mm-dd hh24:mi:ss')-
to_date('2012-10-01 01:00:00','yyyy-mm-dd hh24:mi:ss'))*24*60*60/TT)
不知道我理解的对不对,仅供参考。
select * from tab
where CreateTime between to_date('2012-10-01 01:00:00','yyyy-mm-dd hh24:mi:ss') and
to_date('2012-10-01 12:00:00','yyyy-mm-dd hh24:mi:ss') and
CreateTime in (select to_date('2012-10-01 01:00:00','yyyy-mm-dd hh24:mi:ss')
+TT*rownum/24/60/60 from dual
CONNECT BY rownum<=
(to_date('2012-10-01 12:00:00','yyyy-mm-dd hh24:mi:ss')-
to_date('2012-10-01 01:00:00','yyyy-mm-dd hh24:mi:ss'))*24*60*60/TT);
在上面的语句中,下列部分是构造时间间隔的所有可能存在的记录。每TT秒一条记录。
(select to_date('2012-10-01 01:00:00','yyyy-mm-dd hh24:mi:ss') +TT*rownum/24/60/60
from dual CONNECT BY rownum<=
(to_date('2012-10-01 12:00:00','yyyy-mm-dd hh24:mi:ss')-
to_date('2012-10-01 01:00:00','yyyy-mm-dd hh24:mi:ss'))*24*60*60/TT)
不知道我理解的对不对,仅供参考。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询