在我的mysql数据库中记录
id camper_id reg_date
1 3 2017-04-17 00:00:00
2 3 2017-04-18 00:00:00
3 4 2017-04-15 00:00:00
4 4 2017-04-13 00:00:00
SELECT COUNT(*),camper_id,reg_date FROM tbl_registration GROUP BY camper_id HAVING reg_date >= CURDATE()
我们今天说或CURDATE是2017-04-15 00:00:00
我得到了错误的结果这是我运行查询时得到的结果
COUNT(*) campr_id reg_date
2 3 2017-04-15 00:00:00
2 4 2017-04-18 00:00:00
我应该来......
COUNT(*) camper_id reg_date
2 3 2017-04-15 00:00:00
1 4 2017-04-18 00:00:00
我的查询有什么问题?
答案 0 :(得分:1)
这是您的查询:
SELECT COUNT(*), camper_id, reg_date
FROM tbl_registration
GROUP BY camper_id
HAVING reg_date >= CURDATE();
HAVING
之后 {/ 1>}。但您尚未在GROUP BY
中指定reg_date
。因此,你应该有一个聚合函数。
我认为你真的想要一个GROUP BY
条款:
WHERE
MySQL允许您在聚合中拥有此类“裸”列。但是,这是一个非常糟糕的做法。我认为最新版本的MySQL已将默认行为更改为不允许此构造 - 更符合ANSI SQL以及其他数据库的工作方式。
答案 1 :(得分:0)
请尝试以下方法......
SELECT COUNT(*),
camper_id,
reg_date
FROM tbl_registration
WHERE DATEDIFF( reg_date,
CURDATE() ) >= 0
GROUP BY camper_id;
请在SQL - having VS where阅读dasblinkenlight的回答,以便对WITH
和HAVING
之间的区别进行精彩讨论。
如果您有任何问题或意见,请随时发表评论。