繁体   English   中英

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

[英]SQL Join to Get Row with Maximum Value from Right table

我在使用sql join(oracle / ms sql)时遇到问题我有两个表

一种

ID | 出价
--- | ------
1 | 1
1 | 4
2 | 3
2 | 2
----------


B_ID | B_VA | B_VB
------- | -------- | -------
1 | 1 | 一种
2 | 2 | b
3 | 5 | C
4 | 2 | d
-----------------------

从这两个表中,我需要A.ID,B.B_ID,B.B_VA(最大值),B.B_VB(最大值为B.B_VA),因此结果表就像

ID | B_ID | B_VA | B_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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM