当我希望它们返回相同的结果时,我有两个返回不同结果的查询。
第一个查询返回正确的结果。 第二个返回结果,但它不正确。
为什么这样,我如何修复第二个语句,以便返回相同的结果?我必须在本声明中使用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')
提前感谢您提供的任何帮助。
答案 0 :(得分:0)
分组依据与聚合函数一起使用 - sum,min,max,count。您的查询似乎没有“select”中的聚合 - 因此group by不执行任何操作。
虽然您的查询可能是有效的SQL,但它没有意义。但不确定这是否是为什么你的条款会变得疯狂。
答案 1 :(得分:0)
我认为“id”是你桌子上的主键,是吗?我猜你想要显示各种事件发生的那一天的时间,但我不确定你为什么要按ID分组。您能举例说明您希望输出看起来如何吗?
答案 2 :(得分:0)