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 :

Demande aide sur un filtre "compliqué"


Sujet :

Langage SQL

  1. #1
    Membre averti
    Homme Profil pro
    Sapeur pompier
    Inscrit en
    Février 2008
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Sapeur pompier
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 442
    Points : 416
    Points
    416
    Par défaut Demande aide sur un filtre "compliqué"
    Bonjour,

    Je dois exporter des données afin de les importer dans un nouveau système.
    J'ai une table qui historise les contrôles effectués sur un matériel avec 3 colonnes (identifiant (du matériel), date et le type (il y en a 2 0 ou 1)), je dois prendre les derniers contrôles de chaque type, jusque là pas de soucis mais dans l'ancien SI, lorsque le contrôle typé 0 était effectué ils enregistraient aussi un contrôle de type 1.
    J'ai besoin de n'avoir que les contrôle de type 1 mais pour lesquels il n'y a pas eu de contrôle de type 0 cette année là.
    J'ai réussi à le faire mais quand c'est le même identifiant mais je n'y arrive pas à relier les identifiant dans where.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from matricules_epreuveenceinte me
    where IDENTIFIANT ='62186' and TYPEEPREUVECONTROLE = 1 and (year(DATEEPREUVECONTROLE) not in (select year(DATEEPREUVECONTROLE) from matricules_epreuveenceinte  where IDENTIFIANT ='62186'  and TYPEEPREUVECONTROLE = 0))
    order by DATEEPREUVECONTROLE
    Résultat attendu mais pour tous les matériels(la c'est l'exemple avec un matériel)

    IDENTIFIANT DATEEPREUVECONTROLE TYPEEPREUVECONTROLE
    62186 2015-06-11 11:18:35.000 1
    62186 2017-05-17 11:18:35.000 1
    Résultat retourné si pas de filtre

    IDENTIFIANT DATEEPREUVECONTROLE TYPEEPREUVECONTROLE
    62186 2014-09-01 15:38:58.000 0
    62186 2014-09-01 15:38:58.000 1
    62186 2015-06-11 11:18:35.000 1
    62186 2017-05-17 11:18:35.000 1
    62186 2019-04-03 11:18:35.000 1
    62186 2019-04-18 11:18:35.000 0
    Pouvez-vous me dire comment faire pour écrire je ne veux que l'historique des "TYPEEPREUVECONTROLE" 1 mais en enlevant les "TYPEEPREUVECONTROLE" 1 qui ont été effectuées la même année que les 0

    Merci par avance

    Cordialement

    Sebing

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 286
    Points : 12 991
    Points
    12 991
    Par défaut
    Bonjour,
    Pour chercher les lignes d'une table, pour lesquelles il n'existe pas de ligne dans (la même/une autre) table, il existe l'opérateur NOT EXIST.
    Il est tout à fait possible avec cet opérateur d'utiliser une sous-requête corrélée:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select t1.col1
    from MaTable as t1
    where t1.coly = 2 and not exists(select 1 from AutreTable as t2 on t2.colz = t1.colu and t2.cols = 3)

    Tatayo.

  3. #3
    Membre averti
    Homme Profil pro
    Sapeur pompier
    Inscrit en
    Février 2008
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Sapeur pompier
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 442
    Points : 416
    Points
    416
    Par défaut
    Merci pour votre réponse.
    J'ai vu comment faire relier les matériels entre eux.
    J'ai gardé le not in
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from matricules_epreuveenceinte me
    where  TYPEEPREUVECONTROLE = 1 and (year(DATEEPREUVECONTROLE) not in (select year(DATEEPREUVECONTROLE) from matricules_epreuveenceinte ems  where  ems.TYPEEPREUVECONTROLE = 0 and  me.IDENTIFIANT=ems.IDENTIFIANT ))
    order by identifiant, DATEEPREUVECONTROLE
    Merci encore.
    Bonne soirée

    Sebing

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

Discussions similaires

  1. Demande aide sur les TList
    Par inform113 dans le forum C++
    Réponses: 3
    Dernier message: 17/03/2007, 14h45
  2. [MS Query] neophyte demande aide sur jointures SQL
    Par thorgal972 dans le forum Langage SQL
    Réponses: 19
    Dernier message: 27/11/2006, 18h13
  3. [phpMyAdmin] demande aide sur phpMyAdmin
    Par acipeg dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 25/11/2006, 15h35
  4. Demande aide sur certains avertissements
    Par yostane dans le forum MFC
    Réponses: 1
    Dernier message: 05/07/2006, 08h05

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