【问题标题】:counting rows that date hasn't yet passed计算日期尚未过去的行数
【发布时间】:2011-02-04 23:11:06
【问题描述】:

我正在尝试计算日期尚未过去的行数,因此我只能获取当前记录

我收到一个错误提示

MySQL 错误 #111 组函数使用无效

SELECT COUNT(festivalid) FROM festivals WHERE min(datefrom) > now() 

【问题讨论】:

    标签: sql mysql mysql-error-1111


    【解决方案1】:
    SELECT COUNT(festivalid) 
    FROM festivals 
    WHERE datefrom > now() 
    

    不要使用 min 函数。这会选择不是您要查找的最短日期。

    min函数一般使用如下

    SELECT MIN(dateFrom) FROM festivals
    

    【讨论】:

      【解决方案2】:

      不要使用 MIN...

      SELECT COUNT(festivalid) FROM festivals WHERE datefrom > now() 
      

      【讨论】:

        【解决方案3】:

        错误的原因是您不能在WHERE 子句中使用聚合(即:MIN、MAX、COUNT...)函数——只有在HAVING 子句中才能这样做。要定义 HAVING 子句,您的查询需要定义 GROUP BY 子句:

          SELECT COUNT(f.festivalid)
            FROM FESTIVALS f
        GROUP BY ? --festivalid would NOT be an ideal choice
          HAVING MIN(datefrom) > now()
        

        ...但我对查询有疑问,并认为使用它会更好:

        SELECT COUNT(f.festivalid) 
          FROM FESTIVALS f
         WHERE f.datefrom > CURRENT_TIMESTAMP
        

        CURRENT_TIMESTAMP 是 ANSI 标准,等同于 MySQL 特定的NOW(),使查询可移植到其他数据库。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-04
          • 1970-01-01
          相关资源
          最近更新 更多