在同一表中进行比较的SQL本帖最后由 bkinside 于 2013-07-07 18:34:45 编辑NAMETYPEDATEJACK生日1980JACK
在同一表中进行比较的SQL
本帖最后由 bkinside 于 2013-07-07 18:34:45 编辑 NAMETYPEDATE
JACK生日1980
JACK入职日2000
JACK离职日2008
TOM生日1982
TOM入职日2013
TOM离职日2009
SAM生日1988
SAM入职日2006
以上是表 tableA
现求一SQL语句,查询此表中存在一个人离职日期小于入职日期的记录,比如此表中TOM的离职日期比入职日期小,需要找出。
十分感谢!
[解决办法]
有索引的话,无需优化
另外一种思路
select *
from tableA f
where f.TYPE = '入职日'
and exists
(select 1
from tableA f2
where f2.NAME = f.NAME
and f2.TYPE = '离职日'
and f2.DATE < f.DATE);
[解决办法]
with A_CODE as
(
select 'JACK' namea,'生日' TYPEa,'1980' DATEa from dual union all
select 'JACK' namea,'入职日' TYPEa,'2000' DATEa from dual union all
select 'JACK' namea,'离职日' TYPEa,'2008' DATEa from dual union all
select 'TOM' namea,'生日' TYPEa,'1982' DATEa from dual union all
select 'TOM' namea,'入职日' TYPEa,'2013' DATEa from dual union all
select 'TOM' namea,'离职日' TYPEa,'2009' DATEa from dual union all
select 'SAM' namea,'生日' TYPEa,'1988' DATEa from dual union all
select 'SAM' namea,'入职日' TYPEa,'2006' DATEa from dual
)
select *
from (select tt.namea,
max(decode(TYPEa, '生日', DATEa, null)) as 生日,
max(decode(TYPEa, '入职日', DATEa, null)) as 入职日,
max(decode(TYPEa, '离职日', DATEa, null)) as 离职日
from A_CODE tt
group by tt.namea) TT
where TT.入职日 < TT.离职日
