gpt4 book ai didi

sql - 从行中获取最大值并连接到另一个表

转载 作者:行者123 更新时间:2023-12-02 00:33:33 25 4
gpt4 key购买 nike

抱歉,如果这很愚蠢,我真的是一个试图解决这个问题的新手。

Table A:
ID Rank Name
1 100 Name1
1 45 Name2
2 60 Name3
2 42 Name4
2 88 Name5

Table B:
ID FileName
1 fn1
2 fn2

我想要的是

1 fn1 name1
2 fn2 name5

这就是我的查询的样子,但当我执行连接时,它会给出多行结果(而不是最大值)

select B.Id B.FileName,A.Name
FRom B
JOIN (
select A.Id, MAX(A.Rank)as ExpertRank
from A
group by A.Id
) as NewA on A.Id = B.ID
join B on A.Rank = NewA.Rank

子查询工作正常,我在执行连接时遇到问题。

如何解决这个问题?

谢谢。

我有sql server 2008 R2

最后一个是我错过的。

select B.Id B.FileName,A.Name 
FRom B
JOIN (
select A.Id, MAX(A.Rank)as ExpertRank
from A
group by A.Id
) as NewA on A.Id = B.ID
join B on A.Rank = NewA.Rank
and A.Id = newA.Id

最佳答案

您所写的内容在 from 子句中缺少 A,因此并不完全清楚您出错的地方,但这应该可行

select 
B.Id,
B.FileName,
A.Name
FRom B
INNER JOIN A
ON A.id = B.id
INNER JOIN (
select A.Id, MAX(A.Rank)as ExpertRank
from A
group by A.Id
) as NewA
ON a.Id = NewA.ID
AND a.Rank = NewA.ExpertRank

查看它的工作情况 here

或者您可以使用行号来代替

WITH CTE AS 
(
SELECT ID,
RANK,
Name,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY RANK DESC) rn
FROM A
)
SELECT b.Id b.FileName,cte.Name
FROM
b
INNER JOIN cte
ON b.id = cte.id
and cte.rn = 1

查看它的工作情况 here

关于sql - 从行中获取最大值并连接到另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9473718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com