我有两个查询,它们返回不同的结果,而我希望它们返回相同的结果。
第一个查询返回正确的结果。第二个返回一个结果,但它是不正确的。
为什么会这样?我如何修复第二条语句,使其返回相同的结果?我必须在这条语句中使用HAVING子句。
1.
SELECT
CAST(CONCAT(DATE(`mytable`.`starttime`),' ',HOUR(`mytable`.`starttime`),':',LPAD(60*(MINUTE(`mytable`.`starttime`) DIV 60),2,'0'),':00') AS DATETIME) AS `date`,
`mytable`.`id`
FROM
`mytable`
WHERE
`mytable`.`starttime`>='2011-07-01 00:00:00'
AND `mytable`.`starttime`<='2011-07-01 23:59:59'
AND `id` BETWEEN 1 AND 100
GROUP BY
`mytable`.`id`2.
SELECT
CAST(CONCAT(DATE(`mytable`.`starttime`),' ',HOUR(`mytable`.`starttime`),':',LPAD(60*(MINUTE(`mytable`.`starttime`) DIV 60),2,'0'),':00') AS DATETIME) AS `date`,
`mytable`.`id`
FROM
`mytable`
WHERE
`id` BETWEEN 1 AND 100
GROUP BY
`mytable`.`id`
HAVING `date` IN ('2011-07-01 00:00:00', '2011-07-01 01:00:00', '2011-07-01 02:00:00', '2011-07-01 03:00:00', '2011-07-01 04:00:00', '2011-07-01 05:00:00', '2011-07-01 06:00:00', '2011-07-01 07:00:00', '2011-07-01 08:00:00', '2011-07-01 09:00:00', '2011-07-01 10:00:00', '2011-07-01 11:00:00', '2011-07-01 12:00:00', '2011-07-01 13:00:00', '2011-07-01 14:00:00', '2011-07-01 15:00:00', '2011-07-01 16:00:00', '2011-07-01 17:00:00', '2011-07-01 18:00:00', '2011-07-01 19:00:00', '2011-07-01 20:00:00', '2011-07-01 21:00:00', '2011-07-01 22:00:00', '2011-07-01 23:00:00')提前感谢您所能提供的任何帮助。
发布于 2011-07-29 19:55:29
WHERE子句在GROUPing之前应用,而HAVING在之后应用。因此,在没有where子句的GROUP BY的第二个查询中,MySql返回一个随机的(未确定的)单行,然后对其应用HAVING子句。
发布于 2011-07-29 19:48:34
Group by与聚合函数- sum、min、max、count一起使用。您的查询似乎在"select“中没有聚合-因此group by不做任何事情。
虽然您的查询可能是有效的SQL,但它没有任何意义。不过,我不确定这是否是having子句发疯的原因。
发布于 2011-07-29 19:52:19
我假设"id“是您的表上的主键,对吗?我猜您想要显示一天中发生各种事件的时间,但我不确定您为什么要按id分组。你能举例说明你希望输出是什么样子的吗?
https://stackoverflow.com/questions/6872589
复制相似问题