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

Eléphant du PHP | 337 Messages

04 mars 2007, 05:11

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.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

04 mars 2007, 11:09

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.

Eléphant du PHP | 337 Messages

04 mars 2007, 14:22

Merci, ta solution fonctionne :)

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

Eléphant du PHP | 337 Messages

04 mars 2007, 16:59

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 ?