我正在使用SQL Server,当MAX
是Res
时,我正试图获得Res
的varchar
,我想要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多分钟。必须有一个更好的方法。在那儿?
请试试这个。
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
你不需要MAX
和GROUP 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