2016-09-22 93 views
2

我试图创建一个报表函数,我在我的数据库中存储一些具有特定值(closeDate)的数据,这个值可以只有第7或第21,这里是我的表的一个例子:如何比较两个日期MySQL

Table Example

我想要做的就是每22日执行一个查询,选择所有具有状态=“活动”或“关于批准”登记册和CloseDate <至22日(CURDATE)。我有这个查询,但这个查询显示图像中的所有完全一样,我期望的是查询只显示来自Id = 00001和00003的数据,因为Id 00002 CloseDate(2016-10-21)它不是< 2016-09-22(curdate)。

SELECT tbl_usuarios.Correo, tbl_alertas.Id, tbl_alertas.Purpose, tbl_alertas.Status, tbl_alertas.OpenDate, tbl_alertas.CloseDate, tbl_alertas.Owner, tbl_alertas.ValueStream, tbl_alertas.Family 
FROM tbl_usuarios 
INNER JOIN tbl_alertas ON tbl_usuarios.Nombre = tbl_alertas.Owner 
WHERE STATUS = 'On approve' OR STATUS = 'Active' AND CloseDate < CURDATE() 

我在做什么错了?

+4

您需要了解[运算符优先级(HTTP://开发.mysql.com/DOC/refman/5.7/EN /运营商precedence.html)。你的查询执行为'status ='approve'或(status ='active'and closedat

+0

添加到Marc B所说的内容;通常被认为是一种很好的做法,即使在不需要时也可以“强制”优先,以使意图清楚。 – Uueerdo

回答

1

您可能需要在您的WHERE条件中重新排列子句。它既有OR也有AND,所以它可能不会像你期望的那样被解释。

我会尝试这样的事:

WHERE (STATUS = 'On approve' OR STATUS = 'Active') AND CloseDate < CURDATE() 

或者你也可以简化这个使用IN

WHERE STATUS IN ('On approve', 'Active') AND CloseDate < CURDATE() 
+0

谢谢,我知道这是()哈哈 – User1899289003

0
SELECT tbl_usuarios.Correo, tbl_alertas.Id, tbl_alertas.Purpose, tbl_alertas.Status, tbl_alertas.OpenDate, tbl_alertas.CloseDate, tbl_alertas.Owner, tbl_alertas.ValueStream, tbl_alertas.Family 
FROM tbl_usuarios 
INNER JOIN tbl_alertas ON tbl_usuarios.Nombre = tbl_alertas.Owner 
WHERE (STATUS = 'On approve' OR STATUS = 'Active') AND DATE(CloseDate) < CURDATE()