Причина, по которой вы не можете использовать псевдонимы (которые вы назначаете в части SELECT), заключается в том, что эта часть выполняется после части WHERE.Таким образом, эти псевдонимы недоступны, когда SQL-сервер выполняет часть WHERE.
Я бы не использовал запросы с HAVING без причины, поскольку они обычно дороже ресурсов для SQL-сервера.
Как и послеПользователям, которые НЕ входят в систему после указанной даты и времени, вам вообще не нужно находить MAX-время входа в систему, и простого левого соединения может быть достаточно:
SELECT
sr.fullname
FROM
search_result AS sr
LEFT JOIN login_details AS ld ON (
ld.reg_id = sr.registration
AND ld.login_time > '2018-05-22 18:09:00'
)
WHERE
sr.hire_work = 0
AND ld.login_time IS NULL
;
Если вам все еще нужно время последнего входа в систему для таких пользователей (это было бы до указанной вами даты и времени), вы можете добавить еще один подзапрос (как в исходном запросе) примерно так:
SELECT
sr.fullname
, (
SELECT
MAX(login_details.login_time)
FROM
login_details
WHERE
login_details.reg_id = sr.registration
) AS last_login_time
FROM
search_result AS sr
LEFT JOIN login_details AS ld ON (
ld.reg_id = sr.registration
AND ld.login_time > '2018-05-22 18:09:00'
)
WHERE
sr.hire_work = 0
AND ld.login_time IS NULL
;