就是关于这个帖子的回答
http://topic.csdn.net/u/20090910/15/7300c66d-0829-4608-b287-4eaf1a69274f.html#replyachor
************************************************************发贴人
有张表,很大,里面的数据是每秒一条,有个插入时间列。 
现在有3个条件:starttime,endtime,intervaltime 
即:取得的数据要符合以下条件: 
插入时间在starttime和endtime之间的,但不是每条数据都要, 
需要做一个筛选,即时间间隔为intervaltime。 请问这个SQL怎么写?由于表很大,需要SQL语句效率高些,谢谢。
************************************************************
问题解决,感谢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点都取出来了.

解决方案 »

  1.   

    楼主可以测试下啊
    在这个解决方案的语句里,起始时间是'2009-9-3 8:59:58'
    如果时间间隔为2小时,那么如果存在对应记录的话,前3条记录分别会是
    '2009-9-3 8:59:58','2009-9-3 10:59:58','2009-9-3 12:59:58'
    这里因为乘以3600和24,后面的时间间隔单位是秒你看我的原句应该比较容易理解
    select * from tt 
    where datetime between atarttime and endtime 
      and mod(datetime-starttime,intervaltime)=0 
    将datetime在atarttime and endtime 间
    并且datetime和starttime的时间间隔为intervaltime的整数倍
    将这样的记录提取出来
      

  2.   

    哦 ,我明白了,我原来以为他想取的数据是 这条数据和上条数据的时间间隔为intervaltime的数据呢? 实际他的意思是从start开始每隔intervaltime时间取一条 对吧
    多谢两位.经常光顾我的帖子.