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

Requêtes et SQL. Discussion :

Requête : soustraction valeurs d'un champ


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut Requête : soustraction valeurs d'un champ
    Bonjour, voici ma table :

    ID.........Valeur.................Date
    1............50................17/04/2008
    2............200...............16/04/2008
    5............1000.............18/04/2008

    Je souhaite que la requête affiche la différence des valeurs chronologiquement:

    ............DIF.................Date
    ............0................16/04/2008
    ............-150............17/04/2008
    ............950.............18/04/2008

    J'ai testé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T1.Valeur-(SELECT FIRST(T2.Valeur)
    FROM TAble13 T2 
    WHERE T2.Date <T1.Date ) AS dif
    FROM Table13 AS T1;
    Ca fait la différence mais sans la chronologie.

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.Date, T1.Valeur-(SELECT FIRST(T2.Valeur)
    FROM TAble13 T2 
    WHERE T2.Date <T1.Date ) AS dif
    FROM Table13 AS T1
    ORDER BY T1.Date;
    Un peu comme ça non, j'ai pas testé...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Bizarre, ça fonctionne pour mon exemple mais si je met:

    1............50................17/04/2008
    2............200...............20/04/2008
    5............1000.............18/04/2008

    Là ça marche plus.

    Il me met

    NULL......BIEN
    950........BIEN
    150........PAS BIEN la je veux -800

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Le "FIRST" ça prend le premier enregistrement qu'il trouve dans la table?

  5. #5
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Pardon mais tu pourrais développer (Ca tombe bien )
    Quels sont tes critères de soustraction car en fait tu devrait avoir "-750".

    Tu veux soustraire par apport à ton 1er enregistrement ou par la ligne juste avant...?
    le résultat du 18 - le résultat du 17 = R
    R - le résultat du 20 = R

    Je comprends pas tout, si tu prend le FIRST tu prendra toujours 50 pour tes calculs (???)

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Elle est bien bonne^^

    En fait je veux la différence entre N et N+1 mais sans cumuler:

    Je pars toujours de la date la plus ancienne vers la plus récente.

    Dans mon DERNIER exemple ça donnerait:

    De 50 à 1000 : +950
    De 1000 à 200 : -800

    Sachant que les dates ne sont pas "classées" dans ma table.

    Voilà c'est plus clair là (ou pas).

  7. #7
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Et bien voilà, c'est plus clair, là au moins y'a une base de travail, nickel...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Merci de ton aide, je crois que j'ai trouvé le Jackpot:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.Date, -(T1.Code16-(Select T2.Code16  FROM Table13 T2
    WHERE T2.Date IN (SELECT MIN(T2.Date) 
    FROM Table13 T2 WHERE T2.Date > T1.Date ))) AS DIF
    FROM Table13 AS T1
    ORDER BY T1.Date;

    Je l'ai testé sur toute les configurations de dates possibles il me semble.

    Merci pour ta réactivité.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Elle fonctionne sur une table de 10 enregistrements mais quand je la test sur une table de 5000, là elle plante, c'est normal ? le traitement est trop lourd?

    Merci.

  10. #10
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Elle plante, c'est à dire, elle te donne quoi comme message

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Bon en fait c'est mon bouseux de pc qui ne suivait pas, je résolve cette fois, merci encore Chtulus.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 12/06/2008, 16h06
  2. Requête sélection ID quand un champ a une valeur
    Par thegreatbato dans le forum SQL
    Réponses: 3
    Dernier message: 20/11/2007, 15h23
  3. Récupérer la valeur d'un champ dans une requête
    Par romaintaz dans le forum JDBC
    Réponses: 7
    Dernier message: 18/08/2006, 10h13
  4. transmettre valeur d'un champ à une requête
    Par zut94 dans le forum Access
    Réponses: 3
    Dernier message: 13/10/2005, 17h23
  5. Changement valeur d'un champ dans une requête
    Par Mimile28 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/04/2005, 15h28

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