2015-10-05 97 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的建議。將爲未來記住這一點。 –