计算日期尚未过去的行数
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()
,使查询可移植到其他数据库。
【讨论】:
以上是关于计算日期尚未过去的行数的主要内容,如果未能解决你的问题,请参考以下文章