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!
展开
 我来答
BuddhaQQ
推荐于2017-09-08 · TA获得超过1762个赞
知道小有建树答主
回答量:860
采纳率:100%
帮助的人:970万
展开全部
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等其它的就过滤掉了
其它条件根据需要再加
更多追问追答
追问
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是得除后余数的函数
liiishenggg
2012-12-19 · 超过16用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:30.8万
展开全部
我这样理解:时间段内“整分”数据,也即秒为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')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
随o天
推荐于2018-04-14 · TA获得超过3158个赞
知道大有可为答主
回答量:1740
采纳率:71%
帮助的人:2011万
展开全部
这里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)
不知道我理解的对不对,仅供参考。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式