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

SQLite Discussion :

Calculs sur une colonne pour extraire trois valeurs


Sujet :

SQLite

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut Calculs sur une colonne pour extraire trois valeurs
    Bonjour

    Je me permets de poster à nouveau car je modifie mon appli et je passe de la lecture de fichiers ligne/ligne à SQLITE. Je me suis un peu surestimé.

    J ai une table avec un champ id et un Diff
    Je souhaiterais calculer l'enfoncement maxi de la colonne Diff

    Actuellement je mets cette colonne dans un tabelau et procede ainsi (en delphi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    var
      ColTrade: array [1 .. 12] of integer;
      I, J, Id_Max, Id_Min, iMaxDown, Diff, Diff_Max: integer;
     
    begin
      ColTrade[1] := 12;
      ColTrade[2] := 42;
      ColTrade[3] := 9;
      ColTrade[4] := 14;
      ColTrade[5] := 4;
      ColTrade[6] := 24;
      ColTrade[7] := 59;
      ColTrade[8] := 34;
      ColTrade[9] := 9;
      ColTrade[10] := -16;
      ColTrade[11] := -41;
      ColTrade[12] := -31;
     
      Diff := 0;
      Diff_Max := 0;
      Id_Max := 1;
      Id_Min := 1;
     
      for I := 1 to 12 do
      begin
        Memo1.Lines.Add(inttostr(I) + #9 + inttostr(ColTrade[I]));
        for J := I + 1 to 12 do
        begin
          Diff := ColTrade[J] - ColTrade[I];
          if (Diff < Diff_Max) then
          begin
            Diff_Max := Diff;
            Id_Min := J;
            Id_Max := I;
          end;
        end;
      end;
     
      Memo1.Lines.Add('Id_Max ' + inttostr(Id_Max));;
      Memo1.Lines.Add('Id_Min ' + inttostr(Id_Min));
      iMaxDown := ColTrade[Id_Max] - ColTrade[Id_Min];
      Memo1.Lines.Add('DDMAX ' + inttostr(iMaxDown));
    c est à dire que je boucle sur toutes les valeurs de couples de valeurs Diff pour determiner quelle est la plus grande difference.
    Je teste le couple 1/2,1/3,1/n

    J aimerais savoir s il est possible de faire cela dans une reuqete
    Je souhaite donc extraire le couple id/id et la valeur de cette plus grande difference

    dans mon exemple (code) j extrais le couple 7/11 et la valeur 100

    merci de votre aide et de vos conseils

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Ton problème peut se poser ainsi : je recherche la valeur de Id pour laquelle Diff est le plus grand et la valeur de Id pour laquelle Diff est le plus petit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT  tb1.id      id_min
        ,   tb2.id      id_max
        ,   tb1.diff    diff_min
        ,   tb1.diff    diff_max
    FROM    matable tb1
        ,   matable tb2
    WHERE   EXISTS
            (   SELECT  NULL
                FROM    matable tmn
                HAVING  tb1.diff    = MIN(tmn.diff)
            )
        AND EXISTS
            (   SELECT  NULL
                FROM    matable tmx
                HAVING  tb2.diff    = MIN(tmx.diff)
            )
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Merci de prendre le temps de m aider

    J ai pas pu tester ta requete car sqlitemanager me dit qu' il y a une erreur : a GROUP BY clause is required before HAVING

    par contre je me suis mal exprimé, enfin mon exemple etait trop court
    Sur le chart suivant, j aimerai recuperer id 13 et id 14 car la diff est de 200, même si en 14 ce n est pas le plus bas... en 13 ce n est pas non plus necessairrement le plus haut, c est la difference la plus importante qui m importe

    Nom : 76421_chart_2.png
Affichages : 137
Taille : 6,3 Ko

    merci

Discussions similaires

  1. [AC-2007] Calcul sur une date et obtenir des valeurs pour chaque date obtenue
    Par missalias dans le forum Modélisation
    Réponses: 38
    Dernier message: 07/04/2014, 09h22
  2. [SP-2010] Valeur Calculé sur une colonne
    Par Kevin0363 dans le forum SharePoint
    Réponses: 4
    Dernier message: 19/05/2011, 11h49
  3. Réponses: 2
    Dernier message: 21/02/2007, 19h04
  4. [T-SQL] une colonne pour stocker différentes valeurs
    Par kakid dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/06/2006, 18h40
  5. Boucler sur une table pour renommer des valeurs
    Par webwhisky dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/01/2006, 14h19

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