条件内连接逻辑
Conditional Inner jopin logic
我目前有一个 table 作为(示例快照):
Table1
Employee ID Old Value New Value Update Date
1 Analyst non-employee 10/1/2012
1 non-employee Senior Analyst 10/1/2012
2 Analyst non-employee 9/1/2012
2 non-employee Assistant Mgr. 9/1/2012
2 Assistant Mgr. non-employee 10/1/2015
2 non-employee Manager 10/1/2015
3 Analyst non-employee 10/1/2015
3 non-member Manager 10/1/2015
4 Analyst non-employee 9/1/2012
4 non-employee Senior Analyst 9/1/2012
4 Senior Analyst non-employee 10/1/2015
4 non-employee Assistant Mgr. 10/1/2015
4 Assistant Mgr. non-employee 10/6/2015
4 non-employee Manager 10/6/2015
从这个table中,我需要挑出那些从分析师直接过渡到经理的员工ID,即。没有成为助理经理或高级分析师。
期望的结果:
Employee ID Old Value New Value Update Date
3 Analyst Manager 10/1/2015
我一直在试图找出一种逻辑来使用条件内部联接来获得所需的结果。但到目前为止我没有运气。任何帮助将不胜感激!
如果我理解正确,那么这个查询可能有效:
select t.id, t.oldvalue, tnext.newvalue, t.updatedate
from table t join
table tnext
on t.employeeid = tnext.employeeid and
t.updatedate = tnext.updatedate and
t.newvalue = 'non-employee' and
tnext.oldvalue = 'non-employee'
where t.oldvalue = 'Analyst' and tnext.newvalue = 'Manager';
它应该适用于您的示例数据,但 (4) 很麻烦,因为同一日期有四处更改。
我目前有一个 table 作为(示例快照):
Table1
Employee ID Old Value New Value Update Date
1 Analyst non-employee 10/1/2012
1 non-employee Senior Analyst 10/1/2012
2 Analyst non-employee 9/1/2012
2 non-employee Assistant Mgr. 9/1/2012
2 Assistant Mgr. non-employee 10/1/2015
2 non-employee Manager 10/1/2015
3 Analyst non-employee 10/1/2015
3 non-member Manager 10/1/2015
4 Analyst non-employee 9/1/2012
4 non-employee Senior Analyst 9/1/2012
4 Senior Analyst non-employee 10/1/2015
4 non-employee Assistant Mgr. 10/1/2015
4 Assistant Mgr. non-employee 10/6/2015
4 non-employee Manager 10/6/2015
从这个table中,我需要挑出那些从分析师直接过渡到经理的员工ID,即。没有成为助理经理或高级分析师。
期望的结果:
Employee ID Old Value New Value Update Date
3 Analyst Manager 10/1/2015
我一直在试图找出一种逻辑来使用条件内部联接来获得所需的结果。但到目前为止我没有运气。任何帮助将不胜感激!
如果我理解正确,那么这个查询可能有效:
select t.id, t.oldvalue, tnext.newvalue, t.updatedate
from table t join
table tnext
on t.employeeid = tnext.employeeid and
t.updatedate = tnext.updatedate and
t.newvalue = 'non-employee' and
tnext.oldvalue = 'non-employee'
where t.oldvalue = 'Analyst' and tnext.newvalue = 'Manager';
它应该适用于您的示例数据,但 (4) 很麻烦,因为同一日期有四处更改。