2010-12-11 3 views
1

J'ai un tableau comme celui-ci id, name, datetime qui pourrait stocker plusieurs entrées par jour, maintenant je cherche un moyen de sélectionner le jour avec le plus grand nombre d'entrées en une seule requête.Trier par nombre d'entrées dans MySQL

Jusqu'à présent, je faisais une boucle à travers toutes les entrées et comparais un entier $highest pour chaque valeur, mais il doit y avoir une manière plus simple de le faire avec une requête d'un sql. Des idées quelqu'un?

Mise à jour:

Le tableau ressemble fondamentalement quelque chose comme ça

 
id, name, datetime 
1, test, 2010-12-01 12:12:12 
2, test2, 2010-11-30 12:12:12 
3, test3, 2010-11-30 13:13:13 
4, test4, 2010-10-29 12:12:12

le résultat devrait être 2010-11-30 parce qu'il ya deux entrées de ce jour précis et il est effectivement le « plus haut jour "(ou jour avec le plus grand nombre d'entrées).

+1

Les réponses que vous avez maintenant regarder correctement. Qu'est-ce que "ne fonctionne pas comme espéré" signifie? –

+0

Les deux scripts ne renvoient pas la date avec le plus grand nombre d'entrées – baik

+1

J'ai créé une table temporaire avec vos 4 lignes de test et exécuté les requêtes à partir des réponses existantes, et elles fournissent le résultat que vous demandez (2010-11-30) . –

Répondre

3

Essayez ceci:

SELECT DATE(`datetime`) AS `date` 
FROM your_table 
GROUP BY `date` 
ORDER BY COUNT(*) DESC 
LIMIT 1 
+0

Malheureusement cela n'a pas fonctionné comme espéré, ma question aurait pu être trompeuse, je l'ai mise à jour en conséquence. – baik

+1

Cette requête renvoie '| 2010-11-30 | 'qui est la date avec le plus d'entrées. C'est ce que vous avez demandé. –

+0

a fonctionné comme un charme maintenant, mon erreur, j'ai également utilisé le label 'datetime' pour la colonne' date', ce qui n'a pas fonctionné. – baik

4
SELECT id, name, DATE(`datetime`) AS `date`, COUNT(*) AS `count` 
FROM things 
GROUP BY `date` 
ORDER BY `count` DESC 

Si vous voulez seulement le plus haut jour, ajouter un LIMIT 1 à la fin. Gardez à l'esprit que les id et name proviendront d'un enregistrement aléatoire ce jour-là. Si vous voulez tous les enregistrements ce jour-là, vous devez exécuter une autre requête ou utiliser une sous-requête.

+0

Malheureusement, cela n'a pas fonctionné comme espéré, ma question aurait pu être trompeuse, je l'ai mis à jour en conséquence. – baik

+0

Cette requête renvoie: '| 2 | test2 | 2010-11-30 | 2 | 'qui est une ligne correspondant à la date avec le plus d'entrées. C'est ce que vous avez demandé. –

+0

A travaillé maintenant avec COUNT (*), merci! – baik