从行获取最大值并使用join连接到另一个表

时间:2016-07-20 20:31:18

标签: sql-server

需要帮助才能获得以下输出的查询

表A:

ID  Rank AName
1   1    Name1
2   1    Name2
2   2    Name2.1
3   1    Name3
3   2    Name3.2
3   3    Name3.3

表B:

ID BName
1  fn1
2  fn2
3  fn3

我想要的是

ID  Rank AName   Bname
1   1    Name1   fn1
2   2    Name2.1 fn2
3   3    Name3.3 fn3

请建议。 第二个表中每个id和名称的最大排名。

3 个答案:

答案 0 :(得分:1)

试试这个。

data[-5:]

答案 1 :(得分:0)

这应该有效

select
    a.id,
    a.rank,
    a.aname,
    b.bname
from
(
    select
        [ID],
        [Rank],
        [AName],
        row_number() over (partition by id order by rank desc) maxrank
    from TableA
) a
    inner join TableB b
        on a.id = b.id
where a.maxrank = 1

答案 2 :(得分:0)

获取每个ID的最大排名并进行自我加入以仅获取maxrank的记录,最后加入TableB。

<强>脚本

SELECT TableB.ID,T1.maxrank,T2.AName,TableB.BName
FROM TableB
LEFT JOIN (
    SELECT ID, MAX([Rank]) AS maxrank
    FROM TableA
    GROUP BY ID) AS T1 
      JOIN TableA T2 ON 
        T1.ID=T2.ID and 
        T1.maxrank=T2.[Rank]
ON TableB.ID = T1.ID

<强>输出

enter image description here