2012-04-09 26 views
-1

的时间差如何获得总笔数我要做一个mysql语句获取具有从今天的超过7日期的差异总项目(指今天 - 7)具有超过7

这是我当前的语句:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'complaint_regdate >= DATE_SUB(curdate(),INTERVAL 7 day)' at line 1

+0

你目前的陈述有什么问题? – 2012-04-09 09:54:45

+0

我编辑了我的问题与错误 – 2012-04-09 09:55:27

+0

在您的问题中的查询逻辑上是错误的(它不会做你要求做的,这应该是显而易见的空白后的变化),并包含一个语法错误,你应该修复_before_问一个问题。而且,你只是编辑了插入缺少的AND的问题,这使得错误消息完全不相关,因为它不能来自问题中的查询。 – AD7six 2012-04-09 10:10:50

回答

4

可以使用运营商之间的这种

SELECT COUNT(*) 
FROM complaints 
WHERE complaint_status = 'OPEN' 
    AND complaint_regdate < (CURDATE() - INTERVAL 7 day) 

注意你不需要DATE_SUB功能,你可以只使用一个正常减法。 这些只有在您的complaint_regdate是DATE列时才有效。如果是DATETIME列,则需要使用NOW()而不是CURDATE()或仅提取字段值的日期标记。

+0

它在7天内给我不超过7天。 – 2012-04-09 10:05:20

+0

@AbhilashShukla对不起,误读的问题,已经更新了答案。 – liquorvicar 2012-04-09 10:06:59

+0

非常感谢。另外,如果我想要这样做一个月,我应该添加“INTERVAL 30天”还是其他一些有效的方式来执行它 – 2012-04-09 10:08:54

4

你缺少你的SQL AND运算符:

SELECT 
    COUNT(*) 
FROM 
    complaints 
WHERE 
    complaint_status = 'OPEN' AND 
    complaint_regdate <= curdate() 
    complaint_regdate >= DATE_SUB(curdate(),INTERVAL 7 day) 

我得到这个错误。

SELECT COUNT(*) FROM complaints WHERE complaint_status = 'OPEN' AND complaint_regdate <= curdate() AND complaint_regdate >= DATE_SUB(curdate(),INTERVAL 7 day) 
+0

是否超过过去7天? – 2012-04-09 10:02:48

+0

它在7天内给我不超过7天。 – 2012-04-09 10:05:25

+1

@AbhilashShukla - 你错过了这个答案的重点。它修复了你的一个错误;如果你有其他错误,你应该回应讨论它们的答案。 (当然,一旦你解决了一个错误,你应该再试一次,看看你是否可以自己修复它 - 这是学习的最好方法!)。 – halfer 2012-04-09 10:08:41

1

听起来好像您要求查询查找日期超过7天的计数。上面列出的当前查询显示了最近7天内所有内容的计数。因此,这里是超过7天过去查询:

SELECT COUNT(*) FROM complaints WHERE complaint_status = 'OPEN' AND complaint_regdate < DATE_SUB(curdate(),INTERVAL 7 day) 
+0

我收到这个错误:'你的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行处使用接近'complaint_regdate 2012-04-09 09:58:10

+1

修复了语法错误。 – davidethell 2012-04-09 11:38:33