我的DB中有一个时间戳列,我想要对传递的行数进行求和,让我向您展示对此的查询!
SELECT TIMESTAMPDIFF(MINUTE, `Opened`, NOW()) as PastDue FROM `Task`不是这个查询返回完美的结果,并返回过去到期为负值而其他行为正的所有行。
现在我想数负行的数目,所以我做了
SELECT COUNT(TIMESTAMPDIFF(MINUTE, `Opened`, NOW())) < 0 as PastDue FROM `Task`它现在返回,现在有两行负结果,所以它应该返回两行,但是它总是返回,有人能指出我遗漏了什么吗?
发布于 2020-06-21 00:43:06
COUNT(TIMESTAMPDIFF(MINUTE, `Opened`, NOW())) < 0是一个布尔表达式(检查COUNT是否小于0),它总是返回0 (false),因为COUNT至少必须是0。相反,您可以做的是SUM测试的结果(因为MySQL在数字上下文中将布尔值视为0或1):
SELECT SUM(TIMESTAMPDIFF(MINUTE, `Opened`, NOW()) < 0) as PastDue FROM `Task`请注意,您可以简化此查询,只需将Opened与NOW()进行比较,无论是在SUM中。
SELECT SUM(`Opened` > NOW()) AS PastDue
FROM `Task`或者使用COUNT(*)和一个WHERE子句:
SELECT COUNT(*) AS PastDue
FROM `Task`
WHERE `Opened` > NOW()请注意,根据您问题的措辞,您可能希望将条件更改为
`Opened` > NOW() 至
`Opened` < NOW()https://stackoverflow.com/questions/62493270
复制相似问题