一列上的MAX函数,返回所有列

问题描述 投票:-3回答:2

我正在使用SQL Server,当MAXRes时,我正试图获得Resvarchar,我想要group by pID,但也保持在最终结果。

aID | Res | pID

 1  | Yes | 94
 2  | Yes | 32
 3  | No  | 32
 4  | Yes | 94

SELECT aID, max(Res), pID
FROM Table1
GROUP BY pID

我的最终结果应该是:

aID | Res | pID
 1  | Yes | 94
 2  | Yes | 32

要么

aID | Res | pID
4   | Yes | 94
2   | Yes | 32

整个问题是我不能在最终结果中包含aID。我已经尝试了一个子查询,其中Res是=到max(Res),但有超过50,000条记录,运行这个东西需要20多分钟。必须有一个更好的方法。在那儿?

sql sql-server max common-table-expression
2个回答
0
投票

请试试这个。

SELECT * FROM
(
    SELECT ROW_NUMBER() OVER(PARTITION by A.pID ORDER BY A.pID)As Row_Num,A.* FROM @tblName A
    INNER JOIN 
    (
        SELECT  max(Res) AS Res, pID FROM @tblName GROUP BY pID
    ) B
    ON A.Res= B.Res
    AND A.pID = B.pID
) As O
WHERE O.Row_Num = 1

0
投票

你不需要MAXGROUP BY,如果你只有两个值'Yes'和'No',你只需要res='Yes'的行

您可以使用ROW_NUMBER()编写如下查询。

;with cte as
(
    select aID, Res, pID, row_number() over(partition by pid order by aID desc) rn
    from Table1
    where res='Yes'
)
select aID, Res, pID from cte where rn=1
order by aID
© www.soinside.com 2019 - 2024. All rights reserved.