有个表A,里面有个时间createdate,存的是2007-12-18 10:53:46 之类的内容,我现在要取当天2007-12-18 0:00:00
就是凌晨12点附近,最靠近这个时间点的数据。比方说有三条记录:
2007-12-18 00:01:46 和2007-12-18 00:00:46和2007-12-17 23:59:46 这样的话就把最靠近12点的,也就是2007-12-17 23:59:46 对应的记录取出来。不知道这种语句该怎么写?

解决方案 »

  1.   


    select createdate,min(abs(datediff(ss,createdate,time2))) from table
      

  2.   

    oracle里有datediff函数么?
      

  3.   

    oracle 里没有datediff函数
    select * from (
    select rowNum rn,create_date,
           min(abs(create_date -
                   to_date('2007-12-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))) as times
      from test group by rowNum,create_date ) t where rn = 1
      

  4.   

    select * from yourTable yt 
    where yt.create_date- to_date('2007-12-18   00:00:00',   'YYYY-MM-DD   HH24:MI:SS') in
    (select min(create_date   -
                                  to_date('2007-12-18   00:00:00',   'YYYY-MM-DD   HH24:MI:SS')) from yourTable) 不用3层,两层就够了。
      

  5.   

    create table tb(createdate date)insert into tb values(to_date('2007-12-18 00:01:46','YYYY-MM-DD HH24:MI:SS'))
    insert into tb values(to_date('2007-12-18 00:00:46','YYYY-MM-DD HH24:MI:SS'))
    insert into tb values(to_date('2007-12-17 23:59:46','YYYY-MM-DD HH24:MI:SS'))select createdate from tb where abs(createdate - to_date('2007-12-18 00:00:00' , 'YYYY-MM-DD HH24:MI:SS')) in
    (select min(abs(createdate - to_date('2007-12-18 00:00:00' , 'YYYY-MM-DD HH24:MI:SS'))) 时间差 from tb)drop table tb
    /*
    createdate
    -------------------
    2007-12-17 23:59:46
    */