在下面的查询中,我有两个表,search_result
和 login_details
。
SELECT fullname,
(SELECT MAX(login_time) FROM login_details WHERE reg_id=registration) as login_time
FROM search_result WHERE hire_work=0;
NOTE: reg_id is a column in
login_details
and registration is a column insearch_result
通过执行上面的查询,我得到了 search_result
表中所有用户的全名和上次登录时间。
现在我的要求是获取从今天起过去 180 天内所有未登录的用户以及上次登录时间。当我添加 WHERE
条件时,例如 login_time > '2018-05-22 18:09:00'
,它显示错误 Unknown column login_time blah废话......
查询:
SELECT fullname,
(SELECT MAX(login_time) FROM login_details WHERE reg_id=registration) as login_time
FROM search_result WHERE hire_work=0 AND login_time > '2018-05-22 18:09:00';
请帮助我找到确切的查询。答案将不胜感激。谢谢
最佳答案
您的查询不起作用,因为 WHERE 语句在 SELECT 语句之前执行。 你应该使用 HAVING statement过滤计算字段。例如:
SELECT fullname,
(SELECT MAX(login_time)
FROM login_details
WHERE reg_id=registration) AS login_time
FROM search_result
WHERE hire_work=0
GROUP BY fullname
HAVING login_time < '2018-05-22 18:09:00'
此外,子查询也不是好的做法。您可以使用 JOIN 重写此查询
SELECT search_result.fullname,
MAX(login_details.login_time) AS login_time
FROM search_result
JOIN login_details ON login_details.reg_id=search_result.registration
WHERE search_result.hire_work=0
GROUP BY fullname
HAVING login_time < '2018-05-22 18:09:00'
And.. 您可以使用以下表达式代替固定日期:NOW() - INTERVAL 180 DAY
。例如:
SELECT search_result.fullname,
MAX(login_details.login_time) AS login_time
FROM search_result
JOIN login_details ON login_details.reg_id=search_result.registration
WHERE search_result.hire_work=0
GROUP BY fullname
HAVING login_time < NOW() - INTERVAL 180 DAY
关于WHERE 子句中的 MySQL 列 ALIAS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53432870/