2013-04-04 23 views
3

我需要一個sql查詢,它應該返回主表項和它的子表項(最新的一個條目只有)。我爲此使用了內連接。但我沒有正常工作。 誰能給一個給我這個如何選擇主表數據並選擇參考表頂部的一個數據sql查詢

得益於正確的查詢提前

+0

請參考給定的鏈接可能對你有用http://stackoverflow.com/questions/6972286/getting-the-last-record-in-sql-in-where-condition – dennis 2013-04-04 10:18:04

+0

在什麼列排序在子表中? – 2013-04-04 10:30:39

+0

我需要選擇主表中的所有條目,並且需要選擇其子條目(根據createdDate排名第一) – 2013-04-04 11:10:09

回答

1

在SQLServer2005的+與OUTER APPLY操作

SELECT * 
FROM master t1 OUTER APPLY (
          SELECT TOP 1 t2.Col1, t2.Col2 ... 
          FROM child t2 
          WHERE t1.Id = t2.Id 
          ORDER BY t2.CreatedDate DESC 
          ) o 

或選項使用選項與CTEROW_NUMBER()排名功能

;WITH cte AS 
(       
    SELECT *, 
     ROW_NUMBER() OVER(PARTITION BY t1.Id ORDER BY t2.CreatedDate DESC) AS rn 
    FROM master t1 JOIN child t2 ON t1.Id = t2.Id 
) 
    SELECT * 
    FROM cte 
    WHERE rn = 1 
+0

@Jidheesh Rajan您需要閱讀以下文章:接受答案如何工作? http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – 2013-04-06 06:43:33

0

試試這個,

SELECT ID, DATE 
(
SELECT M.ID, C.DATE, ROW_NUMBER() OVER(PARTITION BY M.ID ORDER BY C.DATE DESC) RN 
FROM MASTER M 
JOIN CHILD C 
ON C.ID = M.ID 
) A 
WHERE RN = 1