2014-05-18 54 views
0

我想写一个mysql查询来检索许多事情的计数。我需要知道的一件事是,有多少条目的日期与查询时的当前日期相比少于1个月。我已经搜索了堆栈溢出了很多,并咨询了mysql文档,但没有任何我正在尝试似乎工作。它一直告诉我我的语法错误。我很茫然。使用日期函数mysql查询时遇到问题

我有很多关于这个查询,其他一切似乎工作正常。

我使用mysql和phpmyadmin来管理我的数据库,并且我正在C#/ visual studio环境中编程。我不知道我使用的是哪个版本的mysql,但根据phpmyadmin的文档,我至少使用5.0版本。我查阅了mysql v5.0的文档,我查看了更新的版本,并且我尝试使用的sql函数没有改变。所以不应该有这个查询不起作用的原因,但从来没有它不起作用的原因。

SELECT count(*) total, ... sum(case where Date <= DATE_SUB(CURDATE(),INTERVAL 1 MONTH) then 1 else 0 end) lastmonth from table; 

如果我删除了上面的sum语句,其余的查询确实有效。 sum之前的语句用逗号分隔,我看不出任何错误的语法,所以它必须与where语句中的sql函数有关。我从mysql文档页面逐字拷贝了这个语句,只改变了它所比较的​​变量的名字,并且间隔为1个月。

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

所以我完全被卡住。可以使用一些帮助!谢谢。

回答

0

我能够得到一个使用不同功能的解决方案。我认为问题在于CURDATE()不是mysql服务器识别的函数,但是CURRENT_DATE()是。奇怪的是,mysql文档说他们是一样的。作为参考,这里是我最终解决该查询:

sum(case when MONTH(Date) = MONTH(CURRENT_DATE()) then 1 else 0 end) lastmonth 

审查我的要求后,因为它变成了我需要检索的次数为“日期”的最后一个月内的数量,即开始查询从本月的第一天开始,直到本月的最后一天。