Sql 子查询中的唯一记录
我有一个SQL表,它将与两个子表连接。其中一个子表是简单联接,但另一个子表将具有一条或多条与父表中的一条记录相对应的记录。我需要编写一个查询,返回父表中的每条记录,并且只返回父表中每个相关记录的最新记录 例如: 父表 ParentIDSql 子查询中的唯一记录,sql,sql-server-2008,Sql,Sql Server 2008,我有一个SQL表,它将与两个子表连接。其中一个子表是简单联接,但另一个子表将具有一条或多条与父表中的一条记录相对应的记录。我需要编写一个查询,返回父表中的每条记录,并且只返回父表中每个相关记录的最新记录 例如: 父表 ParentID 父名称 用户ID 布拉布拉赫 子表1 用户ID 用户名 用户组 用户创建 子表2 SubID ParentID 子名称 苏布拉布拉赫 我的问题是: SELECT * FROM ParentTable INNER JOIN SubTable1 ON Pa
父名称
用户ID
布拉布拉赫 子表1 用户ID
用户名
用户组
用户创建 子表2 SubID
ParentID
子名称
苏布拉布拉赫 我的问题是:
SELECT * FROM ParentTable
INNER JOIN SubTable1
ON ParentTable.UserID=SubTable1.UserID
INNER JOIN
(SELECT TOP 1 * FROM SubTable2) as Table2
ON ParentTable.ParentID = Table2.ParentID
这就是我被困的地方。TOP显然是不对的,因为它只为每个ParentID选择一行,而不是一行
我至少在这方面是正确的吗?一种方法是使用
交叉应用
SELECT *
FROM ParentTable
INNER JOIN SubTable1
ON ParentTable.UserID = SubTable1.UserID
CROSS APPLY (SELECT TOP 1 *
FROM SubTable2
WHERE ParentTable.ParentID = SubTable2.ParentID
ORDER BY [date] DESC) ca
一种方法是使用
交叉应用
SELECT *
FROM ParentTable
INNER JOIN SubTable1
ON ParentTable.UserID = SubTable1.UserID
CROSS APPLY (SELECT TOP 1 *
FROM SubTable2
WHERE ParentTable.ParentID = SubTable2.ParentID
ORDER BY [date] DESC) ca
试试这个:
WITH DAT AS
(
SELECT *,
RANK() OVER(PARTITION BY ParentTable.ParentID ORDER BY ParentID DESC) RN
FROM ParentTable INNER JOIN SubTable1
ON ParentTable.UserID = SubTable1.UserID INNER JOIN SubTable2
ON ParentTable.ParentID = SubTable2.ParentID
)
SELECT *
FROM DAT
WHERE RN = 1
试试这个:
WITH DAT AS
(
SELECT *,
RANK() OVER(PARTITION BY ParentTable.ParentID ORDER BY ParentID DESC) RN
FROM ParentTable INNER JOIN SubTable1
ON ParentTable.UserID = SubTable1.UserID INNER JOIN SubTable2
ON ParentTable.ParentID = SubTable2.ParentID
)
SELECT *
FROM DAT
WHERE RN = 1
在第二个内部连接中,而不是
(SELECT TOP 1 * FROM SubTable2)
使用
在第二个内部连接中,而不是
(SELECT TOP 1 * FROM SubTable2)
使用
我还应该在子查询中添加按日期排序DESC!我还应该在子查询中添加按日期排序DESC!假设后来定义的
子ID
的日期更晚。没错。。我想我不能用这个,因为那样。我的部分应用程序将做插入,通常这将是真实的。。。但是其他人正在开发它的另一部分,不幸的是,我不能保证他们的数据将如何运行。假设以后定义的SubId
具有更晚的日期。没错。。我想我不能用这个,因为那样。我的部分应用程序将做插入,通常这将是真实的。。。但其他人正在开发它的另一部分,不幸的是,我不能保证他们的数据将如何运行。这是真的-我不知道交叉应用!你有cross apply文档的链接吗?@Johan-但这有-我不知道cross apply!你有交叉申请文档的链接吗?@Johan-但是