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 :

calcul dans une requête


Sujet :

Langage SQL

  1. #1
    Membre régulier

    Inscrit en
    Décembre 2002
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 68
    Points : 72
    Points
    72
    Par défaut calcul dans une requête
    Bonjour,
    Voici mon problème :
    J'ai une requête SQL qui ramène x lignes. Ces résultats doivent servir à construire une courbe pour un graphique.
    x peut varier de 2 à 1000.
    Hors l'applet chargée de l'affichage ne gère que 333 valeurs au maximum.
    Ma question est :
    Comment dans une requête SQL ne ramener que 333 enregistrements max, et que ces enregistrements représentent la 'moyenne' ?

    Exemple :
    j'ai 1000 enregistrements de retournés:
    indice |0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10
    -----------------------------------------------------------------
    valeur|5.2|1.2|8.5|8.6|8.7|8.8|9.5|9.87|10.2|11.41|12.3

    si je fais 1000/333 j'obtiens 3. Donc en ne prenant que les valeurs en pas de 3 je n'aurai que 333 valeurs représentant la moyenne lissée.

    indice |0 |3 |6 |9
    -----------------------------
    valeur|5.2|8.6|9.5|11.41

    Admettons que ma requête classique est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT valeur FROM histoVL WHERE idprod='1458'
    Comment la transformer pour n'obtenir qu' un série de valeurs ventilées (comme l'exemple au dessus) ?

    Je tourne sous mySQL 4.0.13

    Merci

    [Balise code ajouté par ZEUSGR]
    [Merci de l'ajouter la prochaine fois ]

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Je propose ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT limit 333 valeur 
    FROM histoVL 
    WHERE idprod % 3=0

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  3. #3
    Membre régulier

    Inscrit en
    Décembre 2002
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 68
    Points : 72
    Points
    72
    Par défaut
    pas mal comme solution. Mais le problème est que les idprod ne se suivent pas. Leur numérotation est assez aléatoire.
    Donc on ne peut utiliser ce champ là.

    Par contre, il ya dans la table un champ date qui permet de les ordonner.
    Mais les dates peuvent avoir des trous (à cause des WE, des jours fériés etc).

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Mon cher avec tous les problème de MySql, nous devant proceder en plusieurs étapes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1-Créer une table identique ayant les mêmes champs que la table histoVl 
    2-Inserer dans cette table, les resultats d'un select sur la table histoVl ordonner par le champs date
    3-Utiliser la requête citée plus haut.
    J'espère qu'il n'ya pas de raison pour que cela échou.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  5. #5
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut
    Tu as dit que tu travaillais avec MySQL 4.0... on m'a dit que dans cette nouvelle version, il a possibilité de faire des procédures stockées... c'est juste? Si c'est le cas, faire un function qui te retourne tes 333 valeurs me semble plus simple que de construire des tables temporaires. Je ne comprends pas bien Wolo Laurent qui te sugère de doubler des données dans une autre talbe => risque d'incohérence, etc.

    A+

  6. #6
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut
    ou peut-être qu'avec une requête tu peux t'en sortir, je ne sais pas si le modulo existe sous MySQL!?!?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT valeur 
    FROM histoVL 
    WHERE idprod='1458' 
    AND indice % 3 = 0;
    Je pense que cela devrait jouer, mais je ne peux malheureusement pas tester cela maintenant.

    A+

  7. #7
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Citation Envoyé par Bouboubou
    Je ne comprends pas bien Wolo Laurent qui te sugère de doubler des données dans une autre talbe => risque d'incohérence, etc.

    A+
    Ou est ce que tu as vu cela ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  8. #8
    Membre régulier

    Inscrit en
    Décembre 2002
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 68
    Points : 72
    Points
    72
    Par défaut résolution du problème
    Enfait, la solution avec modulo aurait été parfaite si la numérotation des produtis dans la base se suivait, ce qui n'est pas le cas (ce que je n'ai pas forcément traduit dnas mon exemple).
    Pour le cas des procédures stockées effectivement, là aussi ça aurait pu être une bonne idée, mais ces procdédures ne sont disponibles que dans la version 4.1 de mysql, version qui est encore en mode alpha (en debuggage)
    Donc, finalement je me suis résolu à porter l'algorythme de "triage" des données au niveau de l'application plutôt qu'au niveau SQL.

    Merci pour votre aide.

  9. #9
    Membre régulier

    Inscrit en
    Décembre 2002
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 68
    Points : 72
    Points
    72
    Par défaut last and least
    enfin la solution de la table temporaire est efectivment la seule solution viable pour répondre à ma question, mais dnas la mesure ou il y a un risque qu'il yait plusieurs accès en même temps à la base histoVL (en SELECT) il risque d'y avoir une surdémultiplication de tables temporaires qui vont conduire à l'engorgement de la mémoire du serveur.

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

Discussions similaires

  1. Erreur de calcul dans une requête
    Par cofi30 dans le forum IHM
    Réponses: 2
    Dernier message: 24/01/2008, 14h44
  2. calculs dans une requête
    Par chti_juanito dans le forum Langage SQL
    Réponses: 0
    Dernier message: 07/09/2007, 12h07
  3. attribut calculé dans une requête
    Par guestCam dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 15/03/2007, 16h58
  4. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  5. Champ calculé dans une requête
    Par HUÏEZ Fabienne dans le forum Access
    Réponses: 3
    Dernier message: 08/12/2005, 12h31

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