您的位置:程序门 -> oracle -> 高级技术



你能一条sql搞定吗?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


你能一条sql搞定吗?[无满意答案结贴,结贴人:xtpdcsse]
发表于:2007-11-05 13:27:52 楼主
根据日期从数据库中取11条数据,比如日期为2007-11-06   得到的数据应该为11-01----11-11。但如果11-06前的数据不够5条的话就得向下多取一条(11-02------11-12)反之,向下的数据不够就向上取,如果向上向下都不够,那也没办法,取出所有就是了。
发表于:2007-11-10 23:55:441楼 得分:0
lead()   和lag()函数

select   *   from   tablename   a,
    (select   *   from
        (select   t.*,
        lag   (to_char(datetime),5)   over     (order   by   datetime)   as   time1   --取得上第五条datatime的值time1.
        lead(to_char(datetime),5)   over     (order   by   datetime)   as   time2   --取得下第五条datatime的值time2.
        from   tablename   t)   t1       where   datetime=2007-11-06     --只取datetime='2007-11-06'   的记录的time1,time2
    )b
where   a.datetime> b.time1   and   a.datetime <time2

实现得不知对不对!!!
思路是先用lead()   和lag()解析函数求tablename中每个datetime的前,后第五个值(前,列名为time1,后,列名为time2)
然后取datetime='2007-11-06'   的那行记录中的time1,time2,
再以time1,time2   为条件查询表
发表于:2007-11-11 13:51:562楼 得分:0
没看明白


快速检索

最新资讯
热门点击