2010-04-06 4 views
2

Je suis en train de compter le nombre de lignes dont la date n'a pas encore passé si je peux obtenir que les enregistrements actuelslignes de comptage de cette date n'a pas encore passé

Je reçois une erreur sayng

MySQL error # 111 utilisation incorrecte de la fonction de groupe

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

Répondre

2

La raison de l'erreur est que vous ne pouvez pas utiliser ensemble (IE: MIN, MAX, COUNT ...) fonctions dans la WHERE clause - seulement dans la clause HAVING pouvez-vous faire cela. Et pour définir la clause HAVING, votre requête doit avoir une clause GROUP BY définie:

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

... mais j'ai des doutes au sujet de la requête, et je pense qu'il serait préférable d'utiliser:

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

CURRENT_TIMESTAMP est équivalent à la norme ANSI spécifique à MySQL NOW(), rendant la requête portable à d'autres bases de données.

3

ne pas utiliser MIN ...

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

N'utilisez pas la fonction min. Cela sélectionne la date minimum qui n'est pas ce que vous cherchez.

La fonction min est normalement utilisé comme suit

SELECT MIN(dateFrom) FROM festivals 
Questions connexes