2009-08-17 9 views
0

J'ai cette requête:Pourquoi cette requête ne fonctionne-t-elle pas?

select count(id) AS num,date_id from table 
    where FROM_UNIXTIME(date_id,'%d-%m-%Y')='17-08-2009' order by date_id DESC; 

Cela devrait donner lieu à tous les id affichés à la date d'aujourd'hui, mais il donne seulement un identifiant (le plus haut). Lorsque je supprime count(id) de cette requête, il fonctionne très bien.

Pourquoi ce nombre ne fonctionne-t-il pas avec cette requête?

+0

Pourriez-vous, s'il vous plait, afficher le résultat que vous avez voulu recevoir? – Quassnoi

Répondre

5

Le nombre est souvent associé à GROUP BY. Avez-vous essayé GROUP BY date_id?

1

Si vous souhaitez sélectionner le nombre total de la date ainsi que chaque date_id:

SELECT date_id, num 
FROM (
     SELECT COUNT(id) AS num 
     FROM table 
     WHERE date_id >= UNIX_TIMESTAMP('17-08-2009') 
       AND date_id < UNIX_TIMESTAMP('18-08-2009') 
     ) 
CROSS JOIN 
     table 
WHERE date_id >= UNIX_TIMESTAMP('17-08-2009') 
     AND date_id < UNIX_TIMESTAMP('18-08-2009') 
ORDER BY 
     date_id DESC 
0

Lorsque vous avez une fonction d'agrégation comme COUNT dans votre requête des colonnes qui ne sont pas agrégées doivent être mentionnés dans un groupe par clause. La raison en est que votre requête ne tient pas vraiment compte de la sémantique d'exécution de SQL.

Cela devrait fonctionner pour vous:

select count(id) AS num,date_id 
from table 
where FROM_UNIXTIME(date_id,'%d-%m-%Y')='17-08-2009' 
group by date_id 
order by date_id DESC; 

De plus, puisque vous êtes juste d'une date, vous n'avez pas besoin de l'ordre par la clause (puisque la requête ne retournera une ligne de toute façon

.
Questions connexes