计算日期尚未过去的行数

Posted

技术标签:

【中文标题】计算日期尚未过去的行数【英文标题】: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() 

【问题讨论】:

【参考方案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(),使查询可移植到其他数据库。

【讨论】:

以上是关于计算日期尚未过去的行数的主要内容,如果未能解决你的问题,请参考以下文章

计算本周特定日期的行数 sqlite

在 Pandas GroupBy 数据框中按 ID 计算两个日期之间的行数

构建一个 SQL 来计算与父级相关的行数

如何计算某天的行数

根据日期计算/分组行,包括缺失

如何计算按多个日期分组的行(在 Symfony 中)?