2013-03-21 87 views
1

我有一個表T1(ID,源,信息,contact_date),ID和源是主鍵,例如如何基於列不是主鍵

id source info contact_date 
01 s1    …   2013-3-1 
01 s2    …   2013-3-1 
01 s3    …   2013-2-28 
… 

我想選擇行編寫一個查詢,結果表會像任何

id source info contact_date 
01 s1    …   2013-3-1 

或者

id source info contact_date 
01 s2    …   2013-3-1 

您可以建議更改主鍵ID和聯繫t_date,但我不能,我必須保持原來的設計。目前我有以下查詢

select 
    t1.id, t1.source, t1.info, t1.contact_date 
from t1 
join 
    (select id, max(contact_date) as contact_date 
    from t1 
    group by id) t2 on t1.id = t2.id and t1.contact_date = t2.contact_date 

但結果表下面是不是我想要的。

id source info contact_date 
01 s1    …   2013-3-1 
01 s2    …   2013-3-1 

任何想法?

+1

這是確定你在問什麼。盡我所能,你只想從單一來源返回記錄?你能澄清嗎? – FreeAsInBeer 2013-03-21 14:50:22

+0

我不在乎結果表中的源代碼是什麼,無論是s1還是s2都可以。 – GLP 2013-03-21 14:51:59

回答

1

您可以使用Ranking Function就可以了。

SELECT id, source, info, contact_date 
FROM 
     (
      SELECT id, source, info, contact_date, 
        ROW_NUMBER() OVER 
        (PARTITION BY ID 
        ORDER BY contact_date DESC) rn 
      FROM t1 
     ) x 
WHERE rn = 1 
+0

工作就像一個魅力,謝謝。 – GLP 2013-03-21 16:43:32

+0

你能解釋一下嗎? – GLP 2013-03-29 17:12:15