【发布时间】:2013-06-07 11:27:30
【问题描述】:
这是一个非常奇怪的家伙,至少对我来说是这样。
我有一个查询,它检索前几个实体的一些统计数据及其过去几个月的相关记录数。
一切正常,但没有显示 Junes 结果。查询运行良好,只是不会给出 Junes 结果。
如果我执行以下任何操作,那么一切都会重新开始:
- 将 IN 子句更改为连接,而不是使用子查询返回与 IN 子句使用的完全相同的列表
- 将星期数添加到组中,因为我已经检查过该组应该是不必要的,并且正确解析了记录的 MonthNumber。
但我真的很想找出为什么会发生这种情况,而不仅仅是修补查询。在我看来,我的查询应该有效。
SELECT
YEAR(FROM_UNIXTIME(mt.`date_created`)) AS 'Year',
MONTH(FROM_UNIXTIME(mt.`date_created`)) AS 'MonthNumber',
MONTHNAME(FROM_UNIXTIME(mt.`date_created`)) AS 'MonthName',
WEEKOFYEAR(FROM_UNIXTIME(mt.`date_created`) ) AS 'Week',
`at`.`group_name`,
COUNT(`mt`.`mt_id_pk`) AS 'record_count'
FROM
`my_table` AS `mt`
INNER JOIN `another_table` AS `at` ON `mt`.`at_id_fk` = `at`.`at_id_pk`
WHERE `at`.`group_name` IN ('something1','something2','something3')
GROUP BY `at`.`group_name`, `MonthNumber`
HAVING `Year` = YEAR(NOW())
ORDER BY `MonthNumber` DESC
【问题讨论】:
-
您将 HAVING 用于聚合函数,但 YEAR() 不是聚合函数。例如 COUNT 或 SUM 是聚合函数。