SQL联接以从右侧表中获取具有最大值的行

SQL联接以从右侧表中获取具有最大值的行,sql,sql-server,join,Sql,Sql Server,Join,我在sql连接(oracle/ms sql)方面遇到问题 我有两张桌子 A. ID| B|u ID ---|------ 1 | 1 1|4 2|3 2 | 2 ---------- B B|ID | B|VA | B|VB -------|--------|------- 1 | 1 | a 2 | 2 | b 3|5|c 4|2|d ----------------------- 从这两个表中,我需要A.ID、B.B_ID、B.B_VA(MAX)、B.B_VB(带MAX B.B_VA) 所以

我在sql连接(oracle/ms sql)方面遇到问题 我有两张桌子

A. ID| B|u ID
---|------
1 | 1
1|4
2|3
2 | 2
----------

B
B|ID | B|VA | B|VB
-------|--------|-------
1 | 1 | a
2 | 2 | b
3|5|c
4|2|d
-----------------------

从这两个表中,我需要A.ID、B.B_ID、B.B_VA(MAX)、B.B_VB(带MAX B.B_VA) 所以结果表应该是这样的

ID | B|u ID | B|u VA | B|u VB
-------|--------|--------|-------
1 | 4 | 2 | d
2 | 3 | 5 | c

我尝试了一些连接,但没有成功。有人能帮我查询得到我想要的结果吗


谢谢

您描述的逻辑与数据不完全一致。例如,
b_va
是数字,但输出中的列是字符串

也许你想要这个。要聚合的
a
中的数据,以获得最大
b_id
值。然后,将要连接的每个列获得相应的
b_vb
列。至少符合您的期望输出:

select a.id, a.b_id, b1.b_vb as b_va, b2.b_vb
from (select id, max(b_id) as b_id
      from a
      group by id
     ) a join
     b b1
     on a.id = b1.b_id join
     b b2
     on a.b_id = b2.b_id;
编辑:

对于更正后的数据,我认为这是您想要的:

select a.id, a.b_id, max(b1.b_va) as b_va, b2.b_vb
from (select id, max(b_id) as b_id
      from a
      group by id
     ) a join
     b b1
     on a.id = b1.b_id join
     b b2
     on a.b_id = b2.b_id
group by a.id, a.b_id, b2.b_vb;
试试这个

SELECT X.ID, Y.B_ID, X.B_VA, Y.B_VB
  FROM (SELECT A.ID, MAX(B_VA) AS B_VA
          FROM A INNER JOIN B ON A.B_ID = B.B_ID 
          GROUP BY A.ID) AS X INNER JOIN
       A AS Z ON X.ID = Z.ID INNER JOIN
       B AS Y ON Z.B_ID=Y.B_ID AND X.B_VA=Y.B_VA

你试了什么?谢谢你,戈登。我尝试了你的查询,但没有得到我想要的结果。您可以在@cissharp查看我的表格、查询和结果。尝试在SQLFiddle上设置一个示例。