MYSQL, как я могу получить строки в условиях

#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
 

Смотрите демонстрацию.