根据日期从数据库中取11条数据,比如日期为2007-11-06 得到的数据应该为11-01----11-11。但如果11-06前的数据不够5条的话就得向下多取一条(11-02------11-12)反之,向下的数据不够就向上取,如果向上向下都不够,那也没办法,取出所有就是了。

解决方案 »

  1.   

    试试看 ..mydate 为你的日期类型字段, enterdate 为你的输入日期.
    select *
      from ( 
           select * 
            from tablename tt
           where tt.mydate > = to_date(&enterdate,'yyyy-mm-dd')
           order by tt.mydate
           )zz
     where rownum <= 11;
      

  2.   

    楼上的这条SQL不行呀,只能取到enterdate之后的,我要得到的数据是以些日期为中心取两头的数据,一共取11条。
      

  3.   

    我想说到这个份子上,也不需要我写出SQL了吧。
      

  4.   

    分页用的吧
    我倒觉得如果哪边不够的话不需要用另一边来补,没这必要
    SQL还真不会写,在程序里能处理的话就到程序里处理好了
      

  5.   

    TO bjt_:
    你这样的做法,会要求他的数据都是连续的。还要用到程序的判断,不是一个很好的方法。添加一个辅助的列(上面提到过),我觉得是不错的方法。
      

  6.   

    简单
    前5天后5天
    union
    前5到10天
    union
    后5到10天最后包一个rownum <= 11
      

  7.   

    1。需要的话,就用
    (
    按照日期的逆序,选出小于输入日期的前5条,
    UNION
    按照日期的顺序,选出大于等于输入日期的前11条,
    )
    里面选取11条(按照日期的顺序)2。不需要的话,就看上面的解释吧,都可以做到。
      

  8.   

    SELECT *
    FROM 
    (SELECT *,
    Row_Number() over (PARTITION BY Sign(date_col - SYSDATE) ORDER BY Abs(date_col - SYSDATE)) AS rn
    FROM table1)
    WHERE rn<=5