Функция MAX на один столбец, возвращает все столбцы - PullRequest
0 голосов
/ 13 марта 2019

Я использую 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 минут. Должен быть лучший способ. Есть ли?

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Пожалуйста, попробуйте это.

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 голосов
/ 13 марта 2019

Вам не нужны 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
...