Page 1 sur 1

Moyennes et sommes sur les 30 dernières entrées

Posté : 04 mars 2007, 05:11
par finipe
Bonjour à tous,

Je souhaiterais effectuer des moyennes et des sommes sur des données numériques, mais uniquement sur les 30 dernières entrées de ma table, exceptée la toute dernière... J'ai d'ailleurs à cette occasion découvert tout plein de commandes sql, ça va me simplifier la vie pour d'autres choses, mais je n'arrive pas à écrire la bonne requête pour le cas présent.

Pour l'instant, j'ai donc essayé ceci :

Code : Tout sélectionner

SELECT SUM(visites) AS item1, AVG(visites) AS item2, SUM(robots) AS item3, AVG(robots) AS item4 FROM stat_quotidien WHERE id IN (SELECT id FROM stat_quotidien ORDER BY id DESC LIMIT 1,30)
...mais évidemment, c'est un flop. Quelle est la bonne syntaxe ?

Merci pour votre aide.

Posté : 04 mars 2007, 11:09
par Hubert Roksor
C'est étrange parce que le principe a l'air ok... (en supposant que id est un entier auto-incrémenté et que les données sont entrées par ordre chronologique)

Essaie comme ça peut-être ?

Code : Tout sélectionner

SELECT SUM(visites) AS item1, AVG(visites) AS item2, SUM(robots) AS item3, AVG(robots) AS item4 FROM ( SELECT visites, robots FROM stat_quotidien ORDER BY id DESC LIMIT 1, 30 ) AS tmp
Les tables dérivées (exemple ci-dessus) sont généralement plus performantes que les sous-requêtes dans la clause WHERE. Si tu veux en savoir plus fais une recherche sur les forums, tu trouveras d'autres exemples/liens.

Posté : 04 mars 2007, 14:22
par finipe
Merci, ta solution fonctionne :)

Par contre, j'ai pas compris pourquoi ma précédente requête ne fonctionnait pas, elle...

Posté : 04 mars 2007, 16:59
par finipe
Petite question subsidiaire : si maintenant je veux récupérer ces valeurs dans un tableau, mais dans l'ordre ascendant, quelle sera la requête ?