2013-01-17 87 views
2

我有兩個相關的表。從查詢子集中獲取最新記錄

Table 1: 
recordid | OrderNumber | MobileNumber 
     1 | 1234  | 9999999999 
     2 | 1234  | 9888888888 
     3 | 1234  | 9777777777 
     4 | 5433  | 9666666666 
     5 | 1444  | 9555555555 
     6 | 1444  | 9444444444 
     7 | 1544  | 9333333333 
     8 | 1632  | 9222222222 


Table 2 
recordid | modifiedon 
     1 | 15/1/2013 
     2 | 17/1/2013 
     3 | 13/1/2013 
     4 | 10/1/2013 
     5 | 16/1/2013 
     6 | 01/1/2013 
     7 | 09/1/2013 
     8 | 08/1/2013 

我想要做的就是的OrderNumber一套獨特和它們對應的MobileNumbers。如果一個OrderNumber有多個記錄,則查詢應得到最新修改記錄的OrderNumberMobileNumber

所以基本上我應該得到以下結果。

OrderNumber | MobileNumber 
1234  | 9888888888 
5433  | 9666666666 
1444  | 9555555555 
1544  | 9333333333 
1632  | 9222222222 

我曾嘗試

select OrderNumber, MobileNumber from Table1 
where OrderNumber in 
(
    Select Distinct table1. rderNumber, table2.ModifiedOn 
    from Table1, Table2 
    group by table2.ModifiedOn desc 
) 

這是緊迫的,我會很大大得到快速響應。

回答

2

這是一個CTEROW_NUMBER簡單:

WITH cte AS 
(SELECT t1.ordernumber, 
     t1.mobilenumber, 
     RN = Row_number() 
       OVER ( 
       partition BY t1.ordernumber 
       ORDER BY t2, modifiedon DESC) 
     FROM table1 t1 
       INNER JOIN table2 t2 
         ON t1.recordid = t2.recordid) 
SELECT ordernumber, 
     mobilenumber 
FROM cte 
WHERE rn = 1 

除此之外,你GROUP BY後有DESC

+0

我已經嘗試使用,以及,但我沒有得到所需的結果。我收到所有記錄 – SPG13

+0

@ SPG13:編輯我的答案。 –

+0

我已經使用Order BY ..對不起,這是我的壞! – SPG13

1
select * 
from 
(
select t1.*, 
     row_number() 
     over (PARTITION BY t1.OrderNumber 
      ORDER BY t2.modifiedon DESC) as rn 
from t1 
left join t2 on (t1.recordid=t2.recordid) 
) 
where RN=1