MySQL`HAVING`问题

时间:2011-07-29 11:43:05

标签: mysql

当我希望它们返回相同的结果时,我有两个返回不同结果的查询。

第一个查询返回正确的结果。 第二个返回结果,但它不正确。

为什么这样,我如何修复第二个语句,以便返回相同的结果?我必须在本声明中使用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')

提前感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:0)

分组依据与聚合函数一起使用 - sum,min,max,count。您的查询似乎没有“select”中的聚合 - 因此group by不执行任何操作。

虽然您的查询可能是有效的SQL,但它没有意义。但不确定这是否是为什么你的条款会变得疯狂。

答案 1 :(得分:0)

我认为“id”是你桌子上的主键,是吗?我猜你想要显示各种事件发生的那一天的时间,但我不确定你为什么要按ID分组。您能举例说明您希望输出看起来如何吗?

答案 2 :(得分:0)

在之前之前应用 之前应用。所以在你的第二个查询中你有没有WHERE子句的GROUP BY MySql返回一个随机(未确定的)单行,然后将HAVING子句应用于它。