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 :

[SQL] extraction des différences de 2 select


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Par défaut [SQL] extraction des différences de 2 select
    Bonjour,

    J'ai une table (survenir) qui contient les champs suivants (id_element, id_evenement,date_evenement)
    id_element est un entier
    id_evenement est un entier
    date_evenement est un datetime

    Cette table recence les événements étant survenus sur des éléments à une date.


    J'effectue une première requête de sélection pour retrouver tous les éléments dont le dernier événément (max(id_evenemt) est survenu entre 2 dates précises.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_element, max(date_evenement)  from survenir
    WHERE date_evenement BETWEEN '2005-08-12 00:00:00' AND '2005-08-12 23:59:59'
    GROUP BY id_element
    Celà me donne un résultat du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    id_element | date_evenement
    --------------------------
    1 | 2005-08-12 00:00:00
    2 | 2005-08-12 00:00:01
    4 | 2005-08-12 00:00:02
    ...
    à coté j'ai une requête récupérant tous les éléments de la table
    cela me donne :
    id_element
    -------------
    1
    2
    3
    4
    ...

    Je voudrais obtenir les id_element non présent dans ma première requête :
    ici ce serait l'id_element "4"

    Est ce possible ?
    (et le tout si possible en une seule requête)

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    ici ce serait l'id_element "4"
    ça ne serait pas plutôt "3" ?

    Et je propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT id_element
    FROM survenir S1
    WHERE NOT EXISTS (
       SELECT id_element, max(date_evenement)
       FROM survenir S2
       WHERE S1.id_element = S2.id_element
       AND date_evenement BETWEEN '2005-08-12 00:00:00' AND '2005-08-12 23:59:59' 
       GROUP BY id_element)

  3. #3
    Membre éclairé Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Par défaut
    aaaaah oui merci c'est ça : il ne manquait l'instruction NOT EXISTS !
    Sinon c'est exactement ça en rajoutant la clause "distinct" pour éliminer les doublons !
    c'est super chouette ! MERCI BEAUCOUP !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT id_element 
    FROM survenir S1 
    WHERE NOT EXISTS ( 
       SELECT id_element, max(date_evenement) 
       FROM survenir S2 
       WHERE S1.id_element = S2.id_element 
       AND date_evenement BETWEEN '2005-08-12 00:00:00' AND '2005-08-12 23:59:59' 
       GROUP BY id_element)

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Ok mais attends si tu as besoin du DISTINCT ça veut dire que id_element n'est pas la (seule ?) clé primaire de ta table survenir et que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT id_element
    FROM survenir
    te retourne des doublons, non ?

    Conclusion : id_element ne te permet pas d'identifier de manière unique une ligne dans ta table survenir donc il existe une contradiction entre le nom de cet attribut et son utilisation dans cette table, non 8) ?

  5. #5
    Membre éclairé Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Par défaut
    en fait, suite à un micmac, la concaténation de tous les champs de ma table est clé primaire. Je contrôle les accès à cette table dans le code donc je ne pense pas qu'il y ait des problèmes.

    merci encore ! :o

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Citation Envoyé par Magnus
    Conclusion : id_element ne te permet pas d'identifier de manière unique une ligne dans ta table survenir donc il existe une contradiction entre le nom de cet attribut et son utilisation dans cette table, non 8) ?
    Pourquoi ?
    Si j'ai bien compris, Survenir capture les événements qui affecte un élément, je ne vois pas le problème, sauf peut-être que, encore une fois si j'ai bien compris, j'aurais baptisé la table Evenement plutôt que Survenir, et idTypeEvenement plutôt que IdEvenement.
    Ceci dit je n'ai peut-être rien compris

  7. #7
    Membre éclairé Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Par défaut
    sisi tu as bien compris :
    en fait, survenir est une table liant les événements (présent dans ma table "événément" avec ma table "éléments" en leur assigant une date ("date_evenement")

    mes événéments sont prédéfini dans ma table "événement"
    les éléments sont prédéfinis dans ma table "élément"
    il ne me reste plus qu'a lier les 2 avec la table "survenir"

    la concaténation des clés étrangères des table suscités devient donc la clé primaire de ma table survenir (id_élément et id_événement)

    j'ai bon ?

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Ceci dit je n'ai peut-être rien compris
    ou c'est encore moi qui ai raconté N'IMPORTE QUOI : je pensais que toxine utilisait un DISTINCT sur la table où id_element est la clé primaire (survenir.id_element doit référencer cet attribut) et qui dans ce cas ne doit pas avoir d'intérêt.

    la concaténation des clés étrangères des table suscités devient donc la clé primaire de ma table survenir (id_élément et id_événement)
    pour moi c'est bon mais je sais plus si je suis très fiable...

  9. #9
    Membre éclairé Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Par défaut
    Je vous remercie tout de même c'est très sympa de votre part de se pencher sur des problèmes aussi ridiculement simple

    et magnus tu as raison sur le fait que survenir.id_element référence bien le clé primaire de ma table "élément"

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

Discussions similaires

  1. [AC-2003] analyse de 2 bases pour extractions des différences
    Par karine62 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/10/2012, 20h29
  2. [SQL Server 2000] Extraction des trimestres
    Par Chtulus dans le forum Langage SQL
    Réponses: 9
    Dernier message: 06/06/2008, 14h50
  3. [Win'Design] Script SQL des différences entre 2 versions
    Par laurentapologic dans le forum Autres
    Réponses: 1
    Dernier message: 24/04/2008, 11h28
  4. Réponses: 2
    Dernier message: 14/05/2007, 16h18
  5. Réponses: 2
    Dernier message: 10/05/2007, 12h55

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