表数据如下:
CAR_ID CAR_MODEL_ID CAN_USE CAR_DATE CAR_BELONG_CITY_ID CAR_BELONG_STORE_ID CAR_AT_CITY_ID CAR_AT_STORE_ID
54 107 1 2012-8-13 22:10:00 26 7
54 107 1 2012-8-13 22:20:00 26 7
54 107 1 2012-8-13 22:30:00 26 7
54 107 1 2012-8-13 22:40:00 26 7
54 107 1 2012-8-13 22:50:00 26 7
54 107 1 2012-8-13 23:00:00 26 7
54 107 1 2012-8-13 23:10:00 26 7
54 107 1 2012-8-13 23:20:00 26 7
54 107 1 2012-8-13 23:30:00 26 7
54 107 1 2012-8-13 23:40:00 26 7
表中的时间时固定格式的,每十分钟一条,查询条件也是时间点,动态获取,格式不固定的,需要查询的结果是离提供时间点最经的时间对应的数据例如:提供的时间时2012-8-13 23:30:01,那么查询出来的数据有两条,分别为时间2012-8-13 23:30:00、2012-8-13 23:40:00对应的数据,也就是时间的前一条和后一条数据,如正好相等,值获取一条数据

解决方案 »

  1.   

    select acctime from (select acctime,row_number() over(order by acctime desc) idx from ac_placestockbook where acctime<sysdate ) where idx=1
      

  2.   

    可以将表拆分两部分
    1.拆分为<=条件时间和>=条件时间的两种资料。
    2.分别抓1中最大和最小时间的资料。
    3.求2中的并集。
      

  3.   

    (1) 取最小时间差
    select min(abs(date1-date2))
    from ....
    (2) 计算正负时间差的后的时间,然后判断该时间是否存在
      

  4.   

    第一步实现了,取出两条数据。
    with
    s1 as (select * from CAR_STATE_107 where car_id=54 and rownum=1 and car_date>=to_date('2012-8-13 20:40:04','yyyy-MM-dd hh24:mi:ss') order by car_date),
    s2 as (select * from CAR_STATE_107 where car_id=54 and rownum=1 and car_date<=to_date('2012-8-13 20:40:04','yyyy-MM-dd hh24:mi:ss') order by car_date desc)
    select * from s1 union all select * from s2
      

  5.   

    结果为:CAR_ID CAR_MODEL_ID CAN_USE CAR_DATE CAR_BELONG_CITY_ID CAR_BELONG_STORE_ID CAR_AT_CITY_ID CAR_AT_STORE_ID CAR_USE_MODE USE_NO UPD_USER_ID UPD_DATE
    54 107 1 2012-8-13 20:50:00 26 7 2012-5-13 0:00:17
    54 107 1 2012-8-13 20:40:00 26 7 2012-5-13 0:00:17
    开始如何在sql语句里面用条件判断呢?要求:如果car_use相同,那么随便取一条数据就可以,否则取car_use=0的那条数据
      

  6.   

    CAR_DATE - :日期
    绝对值排序
      

  7.   

    如果car_use只有0和1两个值则可以按照car_use列升序排序,然后取第一行即可。