2016-03-28 71 views
1

我有一個表:找到從表無效經理在SQL

xx_asg

person_no  location  org  mgr_person_no effective_start_date    eff_end_date  
1    Mumbai  XYZ   101    01-jan-1901      31-DEC-4712  
101    Delhi   xyz  201    01-JAN-2005      31-DEC-4712  
5    Delhi   XYZ   1    01-JAN-1901      31-DEC-4712 

在這個表中的每個人都有其經理人的記錄也是在這個表療法。

但是,如上所見,有些情況像person no 1有效開始日期01-jan-1901但它有一個經理人沒有。 101 其有效開始日期是從01-jan-2005。所以這是無效的,從1901-2005這位經理不存在。

我想要一個查詢從這個表中獲取這種情況。任何人都可以只通過邏輯

回答

1

您可以使用自加盟指導,並檢查經理的日期是不是在人的日期範圍,就像這樣:

SELECT * FROM YourTable t 
INNER JOIN YourTable s 
ON(s.person_no = t.mgr_person_no) 
WHERE s.effective_start_date > t.effective_start_date 
    OR s.effective_end_date < t.effective_end_date 

編輯:如果effective_start_date和effective_end_date列是字符串,而不是日期,你必須將它們轉換:

SELECT * FROM YourTable t 
INNER JOIN YourTable s 
ON(s.person_no = t.mgr_person_no) 
WHERE to_date(s.effective_start_date,'dd/mm/yyyy') > to_date(t.effective_start_date,'dd/mm/yyyy') 
    OR to_date(s.effective_end_date,'dd/mm/yyyy') < to_date(t.effective_end_date,'dd/mm/yyyy') 
+0

@ sagi-這不工作......它沒有返回上述情況。 –

+0

@sreekembose Sry,錯字混淆了t和s,現在可以工作。 – sagi

+0

沒有@sagi這也不行。不翻動任何行。也許因爲只有一個加入是在這個..虐待嘗試與內聯視圖 –