2017-03-15 115 views
-3

我有一个存在的问题,我不知道我的方式。MIN和MAX SQL函数

我有一张表,其中包含下面的记录。

enter image description here

我想退还是这样的:

Result

基本上我需要退换是Documentid并且与排名列最小值纪录的目标,但是对于结果栏公司,需要返回的那个应该是具有最大Rank的那个。

我只能使用一个函数,但我努力创造/使用MIN和MAX函数在同一时间产生的结果。

示例代码

Select 
    documentid, 
    destination, 
    Company 
from Table1 
INNER JOIN (Select Destination, MIN(Rank) AS MINRank from Table1 group by Destination) mindest 
    ON mindest.destination = table1.destination 
+0

你尝试过什么?代码示例会很有帮助。 –

+0

对不起,没有提供我的示例代码,因为上面的只是一个虚拟数据,我的情况非常相似,但数据是保密的,所以我真的不能分享我对实际数据做了什么。 但是,我会尽力为上述提供一个。 –

+0

选择documentid,目的地,从表1 INNER公司(FROM表1 组的目的地选择目的地,MIN(等级)AS MINRank)mindest ON mindest.destination = table1.destination JOIN 这里是我的示例代码上面那个。 –

回答

1

请试试这个...

select documentid, destination, 
(select max(Rank) from table1) [Company] 
from Table1 
    where Rank = (select min(Rank) from table1) 
+0

谢谢。如果不是Table1,我只需要一个结果选择集。 我试过,但没有奏效。 –

+0

'select documentid,destination, (select max(Rank)from table1)[公司] from(SELECT ....)AS Table1 其中Rank =(从table1中选择min(Rank))' –

+0

您将拥有用您的选择替换所有table1 ... – maSTAShuFu

0

你要吗?

DECLARE @tb TABLE(Documentid INT,[Rank] INT ,Destination VARCHAR(10),Company VARCHAR(10)) 
INSERT @tb 
SELECT 12393,1,'Westeros','CompanyA' UNION ALL 
SELECT 12394,2,'Westeros','CompanyB' UNION ALL 
SELECT 12395,3,'Essos','CompanyC' 
SELECT t.Documentid,t.Destination,t.MaxRank AS Company FROM (
    SELECT *,ROW_NUMBER()OVER(ORDER BY [Rank]) AS Seq,MAX([Rank])OVER() AS MaxRank FROM @tb 
) AS t WHERE t.seq=1 
 
Documentid Destination Company 
----------- ----------- ----------- 
12393  Westeros 3