Строка Get имеет максимальное значение в MySQL?

#mysql #sql #subquery #sql-order-by #greatest-n-per-group

#mysql #sql #подзапрос #sql-order-by #наибольшее число на группу

Вопрос:

Я хочу получить staff_id = AZ имеет МАКСИМАЛЬНОЕ ( step ) значение этой таблицы (имя: test).

ID general_id staff_id шаг
1 4 A1 1
2 4 AZ 2
3 4 A2 3
4 5 A3 1
5 5 A4 2
6 5 AZ 3
 SELECT MAX(step) AS STEP, staff_id
FROM test AS t 
WHERE staff_id = AZ 
GROUP BY general_id
 

Ответ №1:

Только для одного сотрудника вы можете использовать order by и limit :

 select *
from test
where staff_id = 'AZ'
order by step desc limit 1
 

Если вы хотите сделать это для нескольких сотрудников одновременно, то один из вариантов использует коррелированный подзапрос:

 select *
from test t
where t.step = (select max(t1.step) from test t1 where t1.staff_id = t.staff_id)
 

Еще одна особенность этого подхода заключается в том, что он допускает верхние связи, если таковые имеются.

Или, в MySQL 8.0, вы можете использовать оконные функции:

 select *
from (
    select t.*,
        rank() over(partition by staff_id order by step desc) rn
    from test t
) t
where rn = 1
 

Комментарии:

1. если я хочу получить general_id строки, содержащие staff_id = AZ со значением MAX `step`, что мне делать? результат, который я хочу, содержит id в том числе 4,5,6