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 MySQL Discussion :

problème de requête


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 32
    Points : 27
    Points
    27
    Par défaut problème de requête
    bonjour
    j'ai un gros pb de requete et je ne m'en sors pas
    voilà j'ai deux tables

    table1(troischamps)
    id
    nom
    valeur



    table2(4 champs)
    id
    id_table1
    controle(enum:oui,non)
    date


    et je veux obtenir une requete qui me mette sur la même ligne
    nom, valeur, dernier controle par id_table1, date où le controle a basculé à la même valeur où il est maintenant



    exemple
    table 2
    id=6 idtable1=3 controle=oui date=2010-08-01
    id=7 idtable1=4 controle=non date=2010-08-02
    id=8 idtable1=4 controle=oui date=2010-08-03
    id=9 idtable1=3 controle=non date=2010-08-04
    id=10 idtable1=3 controle=non date=2010-08-05
    id=11 idtable1=4 controle=non date=2010-08-06


    resultat
    id=3 controle=non date= 2010-08-04
    id=4 controle=non date= 2010-08-06


    Merci d'avance pour votre aide

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    obtenir une requete qui me mette sur la même ligne
    nom, valeur, dernier controle par id_table1, date où le controle a basculé à la même valeur où il est maintenan
    Devant ce genre de besoin, il faut décomposer le problème...

    1) Quelle est la date du dernier contrôle pour chaque id_table1 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_table1, MAX(la_date) AS date_dernier_controle
    FROM table2
    GROUP BY id_table1
    Remarques :
    - J'ai remplacé de le nom de la colonne 'date' par 'la_date' parce que c'est une mauvaise idée d'utiliser un mot du langage SQL comme nom d'un objet (table ou colonne).
    - Une table est composée de lignes et de colonnes, pas de champs !

    2) Quelle est la valeur de ce dernier contrôle pour chaque id_table1 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT t2.id_table1, 
        t2.controle AS valeur_dernier_controle, 
        tmp.date_dernier_controle
    FROM table2 AS t2
    INNER JOIN (
        SELECT id_table1, MAX(la_date) AS date_dernier_controle
        FROM table2
        GROUP BY id_table1
    ) AS tmp ON tmp.id_table1 = t2.id_table1
    WHERE t2.la_date = tmp.date_dernier_controle
    3) Quelle est la plus grande date inférieure à la date du dernier contrôle où la valeur était différente de la dernière valeur ?
    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
    SELECT t.id_table1, MAX(t.la_date) AS date_max_valeur_precedente
    FROM table2 AS t
    INNER JOIN (
        SELECT t2.id_table1, t2.controle, tmp.date_dernier_controle
        FROM table2 AS t2
        INNER JOIN (
            SELECT id_table1, MAX(la_date) AS date_dernier_controle
            FROM table2
            GROUP BY id_table1
        ) AS tmp ON tmp.id_table1 = t2.id_table1
        WHERE t2.la_date = tmp.date_dernier_controle
    ) AS tmp2 ON tmp2.id_table1 = t.id_table1
    WHERE t.la_date < tmp2.date_dernier_controle
        AND t.controle <> tmp2.valeur_dernier_controle
    GROUP BY t.id_table1
    Remarque :
    - Ne donnera un résultat complet que si il y a eu au moins un changement de valeur de controle par id_table1.

    4) Quelle est la plus petite date supérieure ou égale à la dernière date de la valeur précédente ?
    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
    SELECT f.id_table1, 
        MIN(f.la_date) AS date_dernier_changement_valeur_controle
    FROM table2 AS f
    INNER JOIN (
        SELECT t.id_table1, MAX(t.la_date) AS date_max_valeur_precedente
        FROM table2 AS t
        INNER JOIN (
            SELECT t2.id_table1, t2.controle, tmp.date_dernier_controle
            FROM table2 AS t2
            INNER JOIN (
                SELECT id_table1, MAX(la_date) AS date_dernier_controle
                FROM table2
                GROUP BY id_table1
            ) AS tmp ON tmp.id_table1 = t2.id_table1
            WHERE t2.la_date = tmp.date_dernier_controle
        ) AS tmp2 ON tmp2.id_table1 = t.id_table1
        WHERE t.la_date < tmp2.date_dernier_controle
            AND t.controle <> tmp2.valeur_dernier_controle
        GROUP BY t.id_table1
    ) AS tmp3 ON tmp3.id_table1 = f.id_table1
    WHERE f.la_date >= tmp3.date_max_valeur_precedente
    GROUP BY f.id_table1
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Réponses: 19
    Dernier message: 27/08/2003, 15h32
  2. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  3. Problème de requètes concurentes
    Par Emmanuel.G dans le forum XMLRAD
    Réponses: 3
    Dernier message: 08/08/2003, 16h51
  4. Réponses: 2
    Dernier message: 16/07/2003, 14h40
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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