2014-03-31 70 views
0

我是SQL查詢世界的新手。 我需要消除重複的Staff#並只檢索突出顯示的行。 任何幫助是高度讚賞。ORACLE中的SQL查詢 - 選擇最近的日期

Staff#  Pay_DT  Due_DT  loan_flag housing 
------------------------------------------------------------------------ 
123-45-6789  14-Feb-14 3-Jan-14 Y  null 
123-45-6789  14-Feb-14 3-Jan-14 Y  Annual 
123-45-6789  14-Feb-14 13-Jan-14 Y  null 
**123-45-6789 14-Feb-14 13-Jan-14 Y  Annual** 
123-45-6789  null  null  Y  null 
123-45-6789  null  null  Y  Annual 
+2

爲什麼那排?你的主題談論「最近的日期」。你不知道是哪一天。有4行具有相同的最大'pay_dt'。有兩行具有相同的最大「pay_dt」和「due_dt」。你爲什麼選擇一個呢? –

+0

你想只返回那一行? – Coffee

+0

這是一個歷史數據。我需要知道房屋設置爲每年付款DT並付款。感謝您的及時回覆。 – user3482634

回答

0

也許你想

SELECT * 
    FROM (SELECT a.*, 
       rank() over (partition by staff# order by pay_dt desc) rnk 
      FROM table_name a 
     WHERE housing = 'Annual') 
WHERE rnk = 1 

或者

SELECT * 
    FROM (SELECT a.*, 
       max(pay_dt) over (partition by staff#) max_pay_dt 
      FROM table_name a 
     WHERE housing = 'Annual') 
WHERE pay_dt = max_pay_dt 

如果你能有關係(兩行具有相同pay_dt其中housing列具有特定Staff#一個的Annual值值,這兩個查詢都會返回具有該條件的所有行。如果您想任意打破該關係,您可以使用row_number而不是rank。否則,你需要告訴我們你想用什麼邏輯打破關係。