日期:2014-05-17  浏览次数:20769 次

对于一张表的求一条SQL语句,肯定是你感兴趣的
表   修理表
REPAIR

ID       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)

大家看对不对,如果有更简化的希望提出,分我多的是!希望能高手能来答复

------解决方案--------------------
看的眼晕!

select Alise.所需字段 from REPAIR 别名1 left outer join REPAIR 别名2 on(别名1.cp=别名2.cp)
条件自己加--改成内联最好
------解决方案--------------------
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
------解决方案--------------------
aaa就是REPAIR表
------解决方案--------------------
或许,不过考虑到是 "修理表 ",
实际应用中CP和PAIR_DATE应合在一起建成unique,
你见过同一车次(CP)在同一修理时间(PAIR_DATE),修理两次的吗?
也就是说001在2006/5/4修车两次,需要在 "修理表 "中插入两笔记录吗?
------解决方案--------------------
关注!
------解决方案--------------------
不大明白.这个是笔试题吗?