带时间间隔的SQL怎么写

fanday 2009-09-10 03:15:20
有张表,很大,里面的数据是每秒一条,有个插入时间列。
现在有3个条件:starttime,endtime,intervaltime
即:取得的数据要符合以下条件:
插入时间在starttime和endtime之间的,但不是每条数据都要,
需要做一个筛选,即时间间隔为intervaltime。


请问这个SQL怎么写?由于表很大,需要SQL语句效率高些,谢谢。
...全文
163 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanday 2009-09-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wxmwzz2004 的回复:]
引用 5 楼 fanday 的回复:
问题解决,感谢2楼的mod和大家的参与,结贴给分。

解决方案(时间间隔部分):
select t.* from t where mod((inserttime-to_date('2009-9-3 8:59:58','yyyy-mm-dd hh24:mi:ss'))*24*3600,intervaltime )=0

我怎么看不懂呢,如果开始时间是2点,要求的时间间隔是2,在3点,4点,5点,6点各插一条数据 ,那依照这个方法是不是4点和6点都取出来了.
[/Quote]
对,是这个道理,不过得把你的‘点’改成‘秒’
wxmwzz2004 2009-09-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fanday 的回复:]
问题解决,感谢2楼的mod和大家的参与,结贴给分。

解决方案(时间间隔部分):
select t.* from t where mod((inserttime-to_date('2009-9-3 8:59:58','yyyy-mm-dd hh24:mi:ss'))*24*3600,intervaltime )=0
[/Quote]
我怎么看不懂呢,如果开始时间是2点,要求的时间间隔是2,在3点,4点,5点,6点各插一条数据 ,那依照这个方法是不是4点和6点都取出来了.
fanday 2009-09-10
  • 打赏
  • 举报
回复
问题解决,感谢2楼的mod和大家的参与,结贴给分。

解决方案(时间间隔部分):
select t.* from t where mod((inserttime-to_date('2009-9-3 8:59:58','yyyy-mm-dd hh24:mi:ss'))*24*3600,intervaltime )=0
fuyou001 2009-09-10
  • 打赏
  • 举报
回复
select *
from (
select startTime ,endTime ,endTime-startTime min,rownum
from t
)
where startTime >=date and endTime<=date2 and min=intervaltime
用下内联视图
shiyiwan 2009-09-10
  • 打赏
  • 举报
回复
忽略#2回复,语句效率不及#1且取模不对。
shiyiwan 2009-09-10
  • 打赏
  • 举报
回复
select * from
(select * from tablename where dt between starttime and endtime order by dt)
where (rownum-1) % intervaltime = 0;
小灰狼W 2009-09-10
  • 打赏
  • 举报
回复
select * from tt
where datetime between atarttime and endtime
and mod(datetime-starttime,intervaltime)=0

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧