Mysql 如何构造这种类型的SQL语句

Mysql 如何构造这种类型的SQL语句,mysql,select,Mysql,Select,我有一个unix格式的带有lastaccess日期的表。我想查询表中lastaccess日期大于180天的所有记录 这是我目前的问题 SELECT id, auth, username, IF(DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess))>=180,'Y','N') As NotAccessedIn6Months FROM mdl_user WHERE auth = 'manual' 我需要能够使用NotAccessedIn6Months结果

我有一个unix格式的带有lastaccess日期的表。我想查询表中lastaccess日期大于180天的所有记录

这是我目前的问题

SELECT  id, auth, username, IF(DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess))>=180,'Y','N') As NotAccessedIn6Months
FROM  mdl_user 
WHERE auth = 'manual'
我需要能够使用NotAccessedIn6Months结果来过滤结果集,如

SELECT  id, auth, username, IF(DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess))>=180,'Y','N') As NotAccessedIn6Months
FROM  mdl_user 
WHERE auth = 'manual' AND NotAccessedIn6Months = 'Y'
但后一种格式是非法的

谢谢。


您有两种选择:使用HAVING代替WHERE,如下所示:

SELECT id, auth, username, 
       IF(DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess))>=180,'Y','N') As NotAccessedIn6Months
  FROM mdl_user 
 WHERE auth = 'manual' 
HAVING NotAccessedIn6Months = 'Y'
。。。或者只需将此条件移动到何处(因为在此特定查询中根本不会显示'N'值),如下所示:

SELECT id, auth, username 
  FROM mdl_user 
 WHERE auth = 'manual' 
   AND DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess)) >= 180

您有两种选择:使用HAVING代替WHERE,如下所示:

SELECT id, auth, username, 
       IF(DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess))>=180,'Y','N') As NotAccessedIn6Months
  FROM mdl_user 
 WHERE auth = 'manual' 
HAVING NotAccessedIn6Months = 'Y'
。。。或者只需将此条件移动到何处(因为在此特定查询中根本不会显示'N'值),如下所示:

SELECT id, auth, username 
  FROM mdl_user 
 WHERE auth = 'manual' 
   AND DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess)) >= 180

不能在WHERE中使用计算值别名,但可以在HAVING子句中使用。
但是,这会对性能产生影响,因为have不会在查询时过滤,而是在完整的结果集上过滤。

您不能在WHERE中使用计算值别名,但HAVING子句中可以使用。
但是,这会对性能产生影响,因为have不会在查询时过滤,而是在整个结果集上过滤。

您不能将其合并到WHERE子句中:

SELECT  id, auth, username
FROM  mdl_user 
WHERE auth = 'manual' AND DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess))>=180

不能在WHERE子句中合并它:

SELECT  id, auth, username
FROM  mdl_user 
WHERE auth = 'manual' AND DATEDIFF(NOW(), FROM_UNIXTIME(lastaccess))>=180
选择id、身份验证、用户名
来自mdl_用户
其中auth='manual'和lastaccess
您还可以使用
CURRENT\u TIMESTAMP
而不是
CURRENT\u DATE

选择id、auth、username
来自mdl_用户
其中auth='manual'和lastaccess

您也可以使用
CURRENT\u TIMESTAMP
而不是
CURRENT\u DATE

您得到的确切错误消息是什么?您得到的确切错误消息是什么?