#mysql #sql #group-by #sql-order-by #sql-null
Вопрос:
У меня есть структура role_approvers
:
id, role_id, level, user_id, approval_date
Строки:
4116, 1300, 1, 1158, 2021-05-28 14:24:34
4117, 1300, 1, 1186, NULL
4596, 1300, 2, 21, NULL
Мне нужно получить МИНИМАЛЬНЫЙ уровень, на котором role_id = 1300, и ВСЕ утверждения на этом уровне должны быть равны НУЛЮ
Так что в этом случае мне нужно получить уровень = 2, но я не знаю, как это сделать, может кто-нибудь помочь с запросом
Ответ №1:
Вы можете отфильтровать таблицу для role_id = 1300
, сгруппировать по level
, задать условие в HAVING
предложении, чтобы все даты были null
, и вернуть верхний уровень:
SELECT level
FROM role_approvers
WHERE role_id = 1300
GROUP BY level
HAVING MAX(approval_date) IS NULL
ORDER BY level LIMIT 1
Смотрите демонстрацию.