有个表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 对应的记录取出来。不知道这种语句该怎么写?
就是凌晨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 对应的记录取出来。不知道这种语句该怎么写?
select createdate,min(abs(datediff(ss,createdate,time2))) from table
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
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层,两层就够了。
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
*/