2015-10-05 98 views
1

我现在有一个表作为(样品快照):条件内jopin逻辑

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 

从这个表,我需要挑选出转变,从分析师的经理直接,即那些员工ID。而无需成为助理经理或高级分析师。

所需的结果:

Employee ID Old Value New Value Update Date 
3   Analyst  Manager  10/1/2015 

我一直在试图找出逻辑使用条件内连接来得到期望的结果。但到目前为止,我还没有运气。任何帮助将非常感激!

+0

如何区分日期相同的值的排序? –

+0

嗨戈登,谢谢你的回复,我对日期问题表示歉意。我更正了快照数据。每当一个人的头衔发生变化时,首先会转到非员工,然后转到新头衔。我希望这能够澄清你对于错误数据的怀疑和道歉。 –

回答

1

如果我理解正确的话,那么这个查询可能工作:

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)是很麻烦的,因为有在同一天四个转变。

+0

嗨戈登, 我正在使用访问来运行查询。因此,我使用INNER JOIN语法来运行查询。我得到错误,因为部分t不支持JOIN表达式。[New Value] ='Non-Employee'。我正在阅读其他类似的问题,并想知道我是否应该使用联合功能? –

+0

@HimanshuAgrawal。 。 。你的问题被标记为MySQL。如果您想要使用其他数据库的答案,则应正确标记问题。 –

+0

感谢Gordon的建议。将为未来记住这一点。 –