在下面的查询中,我有两个表, 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;
注:reg\ U id是中的一列 login_details
“注册”列在 search_result
通过执行上面的查询,我得到了所有用户的全名和最后一次登录时间 search_result
table。
现在,我的要求是获取所有的用户以及最后一次登录的时间谁都没有登录,从今天起的最后180天。当我添加 WHERE
条件类似 login_time > '2018-05-22 18:09:00'
,它显示错误未知列登录时间等等。。。。。
查询:
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';
请帮我找到确切的查询。请回答。谢谢
2条答案
按热度按时间nqwrtyyt1#
查询不起作用,因为where语句在select语句之前执行。您应该使用having语句来过滤计算字段。例如:
而且,子查询也不是很好的做法。可以使用join重写此查询
还有。。您可以使用以下表达式代替固定日期:
NOW() - INTERVAL 180 DAY
. 例如:2skhul332#
不能使用别名(在“选择零件”中指定)的原因是,此零件在where part之后执行。因此,当SQLServer执行where part时,这些别名不可用。
我不会无缘无故地使用查询,因为对于SQLServer来说,它们通常需要更高的资源开销。
由于您的目标用户在指定的日期时间之后没有登录,因此根本不需要查找最大登录时间,简单的左联接就足够了:
如果仍需要此类用户的上次登录时间(即在指定的日期时间之前),则可以添加另一个子查询(如在原始查询中),如下所示: