对于一张表的求一条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修车两次,需要在 "修理表 "中插入两笔记录吗?
------解决方案--------------------关注!
------解决方案--------------------不大明白.这个是笔试题吗?