计数上周编辑的行数

时间:2017-02-12 11:49:31

标签: mysql

我想计算上周编辑的行数 本周我正在使用此查询

SELECT COUNT( signup ) AS  `count` FROM  `users` WHERE DATE( signup ) >= SUBDATE(CURDATE(), 7) AND CURDATE()

这给了我答案

  

2294

当我试着计算上周的时候。它没有正确计算

SELECT COUNT( signup ) AS  `count` FROM  `users` WHERE DATE( signup ) >= SUBDATE(CURDATE(), 14) AND SUBDATE(CURDATE(), 7)

这给了我答案

  

3000

但正确的答案应该是

  

3000-2294 = 704

我做错了什么?

2 个答案:

答案 0 :(得分:1)

在下面的两个查询中,第二个条件始终为true,因为curdate()SUBDATE(CURDATE(), 7)都返回非零非空值,MySQL将其评估为true。

where date (signup) >= SUBDATE(CURDATE(), 7)
and CURDATE()

与:

相同
where date (signup) >= SUBDATE(CURDATE(), 7)

并在第二个查询中:

where date (signup) >= SUBDATE(CURDATE(), 14)
and SUBDATE(CURDATE(), 7)

相同
where date (signup) >= SUBDATE(CURDATE(), 14)

要解决此问题:

您可能想要使用between

select COUNT(signup) as `count`
from `users`
where date (signup) between SUBDATE(CURDATE(), 7)
        and CURDATE()

select COUNT(signup) as `count`
from `users`
where date (signup) between SUBDATE(CURDATE(), 14)
        and SUBDATE(CURDATE(), 7)

答案 1 :(得分:0)

这两个查询都是错误的,并且无法提供正确的结果。 WHERE

WHERE DATE( signup ) >= SUBDATE(CURDATE(), 7) AND CURDATE()

但它应该使用BETWEEN

WHERE DATE( signup ) BETWEEN SUBDATE(CURDATE(), 7) AND CURDATE() 
在两个查询中都

目前,如果列中有任何日期,则CURDATE() / SUBDATE(CURDATE(), 7)为真