如何编写SQL语句(在SQL Server中)以获取基于两列的最小值的行?
例如:
Type Rank Val1 val2
------------------------------
A 6 486.57 38847
B 6 430 56345
C 5 390 99120
D 5 329 12390
E 4 350 11109
E 4 320 11870
SQL语句应返回上表中的最后一行,因为它具有Rank和Val1的最小值。
答案 0 :(得分:1)
这样的事情:
select *
from Table1
where rank = (select min(rank) from Table1)
and Val1 = (select min(Val1)
from Table1
where rank = (select min(rank) from Table1))
或者,如果你喜欢简单的生活:
select top 1 *
from Table1
order by rank asc, Val1 asc
答案 1 :(得分:1)
with cte as (
select *, row_number() over (order by rank, val1) as rn
from dbo.yourTable
)
select *
from cte
where rn = 1;
这里的想法是我根据排名为行分配1..n枚举,在绑定的情况下,为Val1。我返回值为1的行。如果有可能出现平局,请使用rank()
代替row_number()
。
答案 2 :(得分:0)
我假设 Type 是您的表的主键,并且您只想要一个具有最低Val1和最低Val2的行(因此,如果一行具有最低Val1,但不是最低的Val2,这不会返回数据)。我不确定这些假设,但你的问题可能会被澄清一点 这是代码:
SELECT
*
FROM
Table1
WHERE
Type IN
(
SELECT
Type
FROM
Table1
GROUP BY
Type
HAVING
MIN(Val1) AND MIN(val2)
)