#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