Page 1 sur 1

[sqlite] : moy sur une valeur suite à une selection (résolu)

Publié : lun. 18 nov. 2013, 16:46
par Oldan
Bonjour,

j'ai une table très simple (qui est alimentée toute les 5 secondes) :
Date
Valeur


Pour récupérer la valeur moyenne des 15 dernières secondes, je fais :

Code : Tout sélectionner

SELECT AVG(valeur) AS valeur_moyenne FROM table WHERE DATETIME(date) > DATETIME('NOW', '-15 seconds');
Seulement cette requête est très longue.
Mon idée est alors de récupérer les 3 dernières valeurs et d'en faire la moyenne.
La récup est très rapide

Code : Tout sélectionner

SELECT valeur FROM table ORDER BY date DESC LIMIT 0,3
Mais si j'en fais la moyenne, alors je me retrouve avec la moyenne globale de ma table :'(

Code : Tout sélectionner

SELECT AVG(valeur) FROM table ORDER BY date DESC LIMIT 0,3
Avez vous une idée de comment récupérer uniquement la moyenne des 3 dernières valeurs ?

Merci

Re: [sql (linte)] : moyenne sur une valeur suite à une selec

Publié : lun. 18 nov. 2013, 17:03
par benjarobin
Utilise ta première requête en ajoutant un index sur la date
Ton champs / field est de quel type ?

Re: [sql (linte)] : moyenne sur une valeur suite à une selec

Publié : lun. 18 nov. 2013, 17:18
par Oldan
Merci beaucoup : c'est bien mieux.

Mais ca reste moins rapide que mon bête select des 3 dernières valeurs (je suis sur un minipc ARM, ca doit compter).

Re: [sql (linte)] : moyenne sur une valeur suite à une selec

Publié : lun. 18 nov. 2013, 17:48
par benjarobin
C'est SQL lite ou linte que je ne connais pas ?
Si c'est du SQLite c'est normal que cela soit long, de plus avec un ARM

Re: [sql (linte)] : moyenne sur une valeur suite à une selec

Publié : lun. 18 nov. 2013, 20:18
par Oldan
méa coulpa : c'est bien sqlite. Je corrige mon titre.

Merci en tout cas.
Je ne sais pas si je passe en résolu : je ne sais pas si ce dont je parle au premier post est possible.

Re: [sql (sqlite)] : moy sur une valeur suite à une selectio

Publié : lun. 18 nov. 2013, 21:46
par benjarobin
Un truc comme ceci est possible avec Oracle, avec sqlite aucune idée

Code : Tout sélectionner

SELECT AVG(valeur) FROM (SELECT valeur FROM table ORDER BY date DESC LIMIT 0,3)

Re: [sql (sqlite)] : moy sur une valeur suite à une selectio

Publié : lun. 18 nov. 2013, 22:42
par Oldan
ca marche et c'est instantané(pour un humain) :) !!

Merci beaucoup je passe en résolu !