Il y a beaucoup de questions SQL Top N sur stackoverflow mais je n'arrive pas à trouver celui qui correspond à la situation que j'ai. Je voudrais effectuer un regroupement dans une requête n supérieure. Mes données ressemblent à ceci (évidemment avec de fausses valeurs).Regroupement par un Top N dans MySQL
MY_DATE IP_ADDRESS
1/1/09 999.999.999.999
1/1/09 999.999.999.999
1/1/09 999.999.999.998
... a lot more rows
La plage de dates de la table couvre plusieurs mois et compte plusieurs milliers de lignes par mois. Ce que je voudrais faire, c'est qu'une seule requête m'indique quelles sont les 10 adresses IP les plus fréquentes pour chaque mois. Je peux le faire pour un seul mois en utilisant les éléments suivants:
SELECT DATE_FORMAT(MY_DATE, '%b-%y') AS "MONTH", IP_ADDRESS, COUNT(*) AS HITS
FROM MY_DATA
WHERE DATE_FORMAT(MY_DATE, '%b-%y') = 'JAN-09'
GROUP BY DATE_FORMAT(MY_DATE, '%b-%y'), IP_ADDRESS
ORDER BY HITS DESC
LIMIT 10
Mais ce que je veux vraiment est d'être en mesure de voir le n top pour chaque mois dans l'ensemble de données. Cela m'interdit essentiellement d'utiliser la clause where que j'ai spécifiée. Bien sûr, quand je fais ça, alors je reçois juste le 10 pour tous les mois. Le résultat que je cherche devrait ressembler à ceci:
MONTH IP_ADDRESS COUNT(*)
JAN-09 999.999.999.999 200
JAN-09 999.999.999.998 150
... (8 more rows of January)
FEB-09 999.999.999.999 320
FEB-09 999.999.999.998 234
... (8 more rows of February)
MAR-09 999.999.999.999 440
... ETC.
Est-ce que cela peut être fait en MySQL? Il semble que la barrière que je frappe est que MySQL n'autorise pas un ORDER BY dans une requête incluse dans un UNION. Merci pour l'aide!
Revenant à ce mois plus tard, j'ai enfin essayé cela et ça marche très bien! Je vous remercie! –