2014-12-05 23 views
0

我有一個表(Employee_Training)具有以下欄目:條件分區

  • EMPLOYEE_NUMBER
  • COURSE_ID
  • Date_Completed

我有這個疑問,我用它來展示訓練,它會過濾出重複的Date_Completed,只顯示最近的日期:

SELECT x.* 
FROM (SELECT t.*, ROW_NUMBER() OVER 
    (PARTITION BY t.Course_ID, t.Employee_Number 
      ORDER BY t.Date_Completed DESC) AS rank 
     FROM Employee_Training t) x 
WHERE x.rank = 1 

有什麼辦法來格式化這個查詢,而不是將分區應用到特定的Course_ID,比如1000004?我希望看到所有的行,其中COURSE_ID = 1000004.

下面是一些樣本數據:

只使用一個選擇都在該表:

557 | 1000002 | 2014-11-18 
557 | 1000002 | 2009-7-6 
557 | 1000004 | 2011-1-15 
557 | 1000004 | 2005-9-22 
557 | 1000004 | 2004-4-17 
557 | 1000010 | 2014-6-10 
557 | 1000010 | 2013-6-09 
557 | 1000010 | 2012-6-10 

用我原來的查詢我得到這些結果:

557 | 1000002 | 2014-11-18 
557 | 1000004 | 2011-1-15 
557 | 1000010 | 2014-6-10 

我想看看(只有1000004不會被過濾掉):

557 | 1000002 | 2014-11-18 
557 | 1000004 | 2011-1-15 
557 | 1000004 | 2005-9-22 
557 | 1000004 | 2004-4-17 
557 | 1000010 | 2014-6-10 

謝謝。

謝謝。

回答

0

你可以將它們排除在外,是row_number分區,並將它們結合在一起。

SELECT x.* 
FROM (SELECT t.*, ROW_NUMBER() OVER 
    (PARTITION BY t.Course_ID, t.Employee_Number 
      ORDER BY t.Date_Completed DESC) AS rank 
     FROM Employee_Training t 
     WHERE course_id!=1000004) x 
WHERE x.rank = 1 

UNION ALL 

SELECT t.*,1 as rank 
     FROM Employee_Training t 
     WHERE course_id=1000004