2013-04-04 63 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