获取对应于其他行的最大值的行

时间:2013-07-01 07:27:11

标签: sql

我的表TAB有两个字段ABAVarchar2(50)B是{{1} }}

假设我们有这些值:

Date

我们需要将字段 A | B ------------------ a1 | 01-01-2013 a2 | 05-05-2013 a3 | 06-06-2013 a4 | 04-04-2013 的值与字段A的最大值相对应,这意味着我们需要返回B

我提出了这个要求:

a3

但我想避免在此解决方案中使用嵌套选择。

您对解决方案有所了解吗?

谢谢

3 个答案:

答案 0 :(得分:2)

我制作了sqlfiddle,其中列出了4种不同的方法来实现您的目标。请注意,我在您的示例中添加了另一行。所以你有两行最大日期。看看查询之间的区别? Manoj的方式只会给你一行,虽然2行符合标准。您可以单击“查看执行计划”以查看SQL Server处理这些查询的区别。

4种不同的方式(用标准SQL编写,它们应该适用于每个RDBMS):

select A 
from TAB 
where 
B = (select max(B) from TAB);


select top 1 * from tab order by b desc;


select 
*
from
tab t1
left join tab t2 on t1.b < t2.b
where t2.b is null;


select
*
from
tab t1
inner join (
  select max(b) as b from tab
  ) t2 on t1.b = t2.b;

这里有两种方法,特别是对于SQL Server,这要归功于a_horse_with_no_name:

select *
from (
  select a, 
         b,
         rank() over (order by b desc) as rnk  
  from tab
) t
where rnk = 1;

select *
from (
  select a,
         b, 
         max(b) over () as max_b
  from tab
) t
where b = max_b;

看到他们工作here

答案 1 :(得分:1)

您也可以尝试这种方式

SELECT TOP 1 A FROM TAB ORDER BY B DESC

由于

的Manoj

答案 2 :(得分:0)

这对你很好...试试吧

SELECT TOP 1 A,B FROM TAB ORDER BY B DESC