表 修理表
REPAIRID   CP  PAIR_DATE IS_SECOND PAIR_TIMES 
 1   001  2006/5/4   1        1
 2   001  2006/4/2   O        O
 3   002  2006/4/3   1        2
 4   002  2006/3/2   1        1
 5   002  2006/2/1   0        0查询结果:
CP   PAIR_DATE_1 PAIR_DATE_2
001  2006/5/4    2006/4/2 
002  2006/4/3    2006/3/2也就是求CP相等的条件下最新的2个日期 
其中IS_SECOND代表是否是2次以上的修理 PAIR_TIMES 代表修理次数自己写的个查询语句
select o.cp,o.PAIR_DATE PAIR_DATE_1 t.PAIR_DATE PAIR_DATE_2 
from
(select * from REPAIR where IS_SECOND=1)O 
INNER JOIN REPAIR T ON O.CP =T.CP AND O.ID <>T.ID
WHERE
O.ID = (SELECT ID from (select * from REPAIR order by PAIR_DATE desc)a where rownum = 1 and o.cp = a.cp)
and t.id = (SELECT ID from (select * from REPAIR order by PAIR_DATE desc)a where rownum = 1 and o.cp = a.cp and t.id <> a.id)大家看对不对,如果有更简化的希望提出,分我多的是!希望能高手能来答复

解决方案 »

  1.   

    看的眼晕!select  Alise.所需字段 from REPAIR 别名1 left outer join REPAIR 别名2 on(别名1.cp=别名2.cp) 
    条件自己加--改成内联最好
      

  2.   

    select a.CP,max(a.PAIR_DATE) as PAIR_DATE_1,max(b.PAIR_DATE) as PAIR_DATE_2
    from aaa a
    inner join aaa b on a.CP = b.CP and b.PAIR_DATE < a.PAIR_DATE
    group by a.CP
      

  3.   

    select  Alise 是什么意思,不懂,至于DragonBill(用户中文昵称------静观其变,以静制动) 如果时间相同的你的语句就有问题了
      

  4.   

    或许,不过考虑到是"修理表",
    实际应用中CP和PAIR_DATE应合在一起建成unique,
    你见过同一车次(CP)在同一修理时间(PAIR_DATE),修理两次的吗?
    也就是说001在2006/5/4修车两次,需要在"修理表"中插入两笔记录吗?