我用select l.link_repair_time from ws_bffaultsheet_link l 
where l.main_id = 5531 and l.link_repair_time is not null  order by l.link_id desc 
在数据库中查询出两个数据 
2009-12-11 20:30:29 
2009-11-27 9:18:00 
我想取第一个时间2009-12-11 20:30:29。 
select l.link_repair_time from ws_bffaultsheet_link l 
where l.main_id = 5531 and l.link_repair_time is not null  and rownum=1 order by l.link_id desc 可是这个取出来的是2009-11-27 9:18:00 请问如何修改这个sql 为什么我用rownum 和order by 来做控制了,去不出来我的第一个时间

解决方案 »

  1.   

    select l.link_repair_time from ws_bffaultsheet_link l 
    where l.main_id = 5531 and l.link_repair_time is not null  and rownum=1 order by l.link_id desc 
    这个语句中的order by l.link_id desc 好像是没有起作用啊。改成order by l.link_id asc和order by l.link_id desc 的结果是一样的
      

  2.   

    因为rownum不是用order by 控制的
      

  3.   

    select max(l.link_repair_time) from ws_bffaultsheet_link l 
    where l.main_id = 5531 and l.link_repair_time is not null 
    如果你是要取时间最晚的,那你用max可以得到。rownum不是根据排序来确定的。
      

  4.   

    SELECT * FROM 
    (
    select l.link_repair_time from ws_bffaultsheet_link l 
    where l.main_id = 5531 and l.link_repair_time is not null   order by l.link_id desc 
    ) A
    WHERE rownum=1
      

  5.   

    要先排序,再取Rownum=1,否则取出来的数据不准确
      

  6.   

    select l.link_repair_time from
    (
    select l.link_repair_time from ws_bffaultsheet_link l 
    where l.main_id = 5531 and l.link_repair_time is not null  order by l.link_id desc 

    where rownum=1;
      

  7.   

    你是按ID排的啊,再家个日期排就行了。
    或者按日期分下组,取max最大的那条。或者还可以用分析函数
    select * from (
    (select x,row_number() over (order by l.link_repair_time desc) rn from table)where rn=1