IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Select Max + Limit ?


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut Select Max + Limit ?
    Bonjour à tous.
    Je coince sur une requète sql, pourtant simple..

    Explication :
    Une station météo me transmet des données via un fichier texte sur un ftp. Toutes les 30 sec environ..
    Une routine "remplit" une base sql.. et ces données sont traitées pour un affichage instantanée des données..

    Pour le vent, j'ai 2 données à sortir :
    - La vitesse du vent "instantané" et "les rafales"..
    Pour plus de précision, j'ai choisi de traiter la vitesse en faisant la moyenne des 20 derniers enregistrements, et les rafales sur la valeur MAX des 30 derniers enregistrement.. C là mon souci..

    Si j'effectue la requête sur toute la base, ça fonctionne très bien.
    Pour la moyenne par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            $query = "SELECT AVG(v9) AS vmoyen FROM meteo";
    	connect();
    	$result= mysql_query($query);
     
    	while ($val = @mysql_fetch_array ($result))
    		{
    			$v9=$val['vmoyen'];
    		}
    En revanche si je remplace ma requète par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT AVG(v9) AS vmoyen FROM meteo LIMIT 0,20 DESC"
    Rien ne vas plus..
    Quelqu'un à une idée ?

    Je veux bien faire les calculs en triturant les données derrière, mais c'est frustrant..

    Merci.


    Je n'ai plus aucun résultat..

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    je vais peut-être dire une bêtise mais j'essayerais ça :

    avg prend en compte tous les champs, limit étant appliqué après pour l'affichage.


    donc si tu crées une vue, avec le limit -> 30 lignes dans la vue.

    tu peux ensuite faire avg dessus.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut Oui effectivement..
    Vu sous cette angle là..

    Mais comment dois-je m'y prendre pour créer un vue.. ?

    CREATE VIEW vue_max AS SELECT * FROM meteo LIMIT 0,20
    SELECT MAX(v9) AS rafale FROM vue_max

    ?
    Je vais essayer de ce pas..

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Bon..
    J'ai essayé ça ( avec quelques autres variantes )..
    Mais sans succès..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
          $vue1=mysql_query("CREATE VIEW vue_avg AS SELECT * FROM meteo LIMIT 0,20 DESC");
    	$query = "SELECT AVG(v9) AS vmoyen FROM vue_avg ";
    	connect();
    	$result= mysql_query($query);
     
     
    	while ($val = @mysql_fetch_array ($result))
    		{
     
    		$v9=$val['vmoyen'];
    		}

  5. #5
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    et bien je ne sais pas

    en contournant le problème, tu pourrais simplement faire ta moyenne en PHP en récupérant les x premières lignes

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 400
    Points
    28 400
    Par défaut
    Tu parles des 20 ou 30 dernières lignes...
    Cela suppose que tu as un moyen d'identifier l'ordre dans lequel ces lignes ont
    été créées.
    Quel est-il ? (heure? id auto-incrémenté ?)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut
    Oui Al1_24,
    -> effectivement, j'ai un id auto incrémenté pour connaitre l'ordre.

    Mathusalem..
    --> C'est ce qui m'est venu à l'esprit.. Mais si je peux éviter...

    A suivre.
    Je continue à chercher dans tous les cas.
    Merci..

  8. #8
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    Si je suis l'idée de Al1, si tu as les numéros d'ordres tu n'as qu'à mettre

    having Id > max(Id)-20


    edit : faute d'orthographe honteuse

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 400
    Points
    28 400
    Par défaut
    Citation Envoyé par Mathusalem
    Si je suis l'idée de Ali, si tu as les numéros d'ordres tu n'as qu'à mettre

    having Id > max(Id)-20
    C'est bien dans ce sens là que je voulais aller...

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut Formidable..
    Ce coup-ci cela à l'air de marcher..
    Il faut tout de même que je fasse un contrôle manuel sur les valeurs données..

    Vous pouvez voir le résultat sur :
    http://www.airlauragais.net/meteo


    Merci en tout cas.
    Très sympa à vous deux..

  11. #11
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par gerald@23juin.net
    Ce coup-ci cela à l'air de marcher..
    Il faut tout de même que je fasse un contrôle manuel sur les valeurs données..

    Vous pouvez voir le résultat sur :
    http://www.airlauragais.net/meteo


    Merci en tout cas.
    Très sympa à vous deux..

    c'est chouette ! Les cadrans sont fait en quoi ? Flash ?


    Tu as un NaN au milieu des températures

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut J'ai peut être crier victoire un peu trop vite...
    J'ai peut être crier victoire un peu trop vite...
    Apparemment les données ne correspondent pas..

    Je vais continuer à creuser.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut Oui?
    Merci..
    Oui les jauges sont en actionscript 2.0..
    Mais je n'ai fait que les reprendre et les modifier..
    J'ai passé quelques heures sur FlashDevelop...

    Si ça t'interesse c'est ce monsieur qui a gentiment mis les sources à disposition
    http://www.aguilmard.com/

    A+

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 22
    Points
    22
    Par défaut Pour ne pas mourrir idiot
    Bon..
    je viens de faire de multiples tests..
    Visiblement ma table ne comprends plus les attributs ASC et DESC sur les LIMIT.

    Moralité :
    1. Toutes les solutions proposées fonctionnaient bel et bien.
    2. Je suis un ane
    3. Mieux vaut 1 qui trouve que 10 qui cherchent

    Merci et désolé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec un select max
    Par bobic dans le forum Oracle
    Réponses: 7
    Dernier message: 14/11/2005, 11h22
  2. [SQL] requete select max
    Par kabikou dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 19/10/2005, 16h18
  3. Aide pour un SELECT MAX(...)
    Par Gladiator dans le forum Langage SQL
    Réponses: 7
    Dernier message: 24/06/2005, 16h48
  4. Incrémenter champ : insert into . select max(.) + 1 from .
    Par ludo.guy dans le forum Langage SQL
    Réponses: 10
    Dernier message: 25/11/2004, 14h39
  5. Problème select MAX(annee) dans une requête
    Par grisounette dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 28/10/2004, 17h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo