MySql-select if语句结果上的where条件

MySql-select if语句结果上的where条件,mysql,sql,Mysql,Sql,我有下面的例子 SELECT oa.country_id, s.country_id, (IF( s.country_id = oa.country_id, DATE_ADD(DATE(so.created_at), INTERVAL 2 DAY), DATE_ADD(DATE(so.created_at), INTERVAL 5 DAY) ) ) AS inter 我想添加如

我有下面的例子

SELECT
     oa.country_id,
     s.country_id,
     (IF(
          s.country_id = oa.country_id,
          DATE_ADD(DATE(so.created_at), INTERVAL 2 DAY),
          DATE_ADD(DATE(so.created_at), INTERVAL 5 DAY)
         )
     ) AS inter
我想添加如下条件:

WHERE inter >= CURDATE() -  INTERVAL DAYOFWEEK(CURDATE())+6 DAY 
    AND inter > CURDATE() - INTERVAL DAYOFWEEK(CURDATE())-1 DAY;
是否可以将结果添加到何处? 或者我需要在WHERE中重复相同的if语句查询两次

Thnak you.

您不能在WHERE子句中使用inter,因为此处不理解列别名。您可以使用CTE或子查询

然而,MySQL扩展了HAVING对非聚合查询的使用。因此,您可以添加HAVING子句:


注意:表达式的逻辑看起来不正确-但这是您问题中的表达式。第一部分更具限制性,因此第二部分是多余的。也许您打算在向inter添加where时会发生什么,如图所示?在where中不能使用输出列别名。将这些条件改为“拥有”。编辑您的原始帖子,而不是您拥有的内容。把你要找的东西写清楚。例如:我希望拉的日期创建的基础上xxxx。但是,如果国家/地区ID为yyyy,我需要更改时间间隔,例如从一个国家/地区到另一个国家/地区的交货可能会出现更长的延迟。延迟交付不应影响您正在查找的数据的时间段。一旦修改,您可能会得到更好的选项来解决您的需求,而不仅仅是如何修复where条件。逻辑不正确?我正在尝试查找创建日期加上2或5天的行,结果必须是最后7天的日期。@Klick。这回答了您提出的关于使用inter进行过滤的问题。如果你有一个关于逻辑的问题,那么问一个新的问题,包括样本数据、期望的结果以及你想要做什么的清晰解释。
HAVING inter >= CURDATE() -  INTERVAL DAYOFWEEK(CURDATE())+6 DAY AND
       inter > CURDATE() - INTERVAL DAYOFWEEK(CURDATE())-1 DAY;