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 :

Requête sur 2 tables selon une date


Sujet :

Langage SQL

  1. #1
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut Requête sur 2 tables selon une date
    Bonjour,

    J'ai 2 tables => 1 table qui contient des dossiers et une table qui contient des activités. Chaque activité a une date et est liée à un seul dossier, plusieurs activités peuvent être liées au même dossier.
    J'aimerais faire une requête qui me retourne tous les dossiers pour lesquels aucune activité n'a été saisie depuis le 31 juillet 2016.

    J'ai fais ceci mais ça me retourne le contraire, à savoir les dossiers qui ont au moins une activité depuis le 31 juillet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT (MD.NUMERO), he.date
    FROM MD_MANDAT MD, HE_HEURE HE WHERE HE.MD_MANDAT_ID = MD.ID and he.date > '2016-31-07' group by md.numero, he.date having count(*) = 1 order by he.date desc
    Qqun peut-il m'aider ?

    merci d'avance pour votre aide

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2015
    Messages : 90
    Points : 98
    Points
    98
    Par défaut
    Tu dois avoir un soucis de type, ton champ date est bien de type date et pas varchar ?

  3. #3
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    oui c'est un datetime

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2015
    Messages : 90
    Points : 98
    Points
    98
    Par défaut
    si vous faite un cast(he.date as date) ?

    edit : le plus propre serait encore de caster la variable (convert(datetime, '20XX-0X-0X', 121)) plutôt que la colonne pour ne pas perdre les index

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 262
    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 262
    Points : 12 936
    Points
    12 936
    Par défaut
    Bonjour,
    Il n'y a aucun problème de format, de cast ou autre.
    Par contre il y a un problème de logique, qui apparaît si on écrit les jointures "correctement":
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT DISTINCT (MD.NUMERO), he.date
    FROM MD_MANDAT MD
    INNER JOIN HE_HEURE HE on HE.MD_MANDAT_ID = MD.ID 
    where he.date > '2016-31-07'
    group by md.numero, he.date
    having count(*) = 1
    order by he.date desc
    En fait cette requête renvoie les mandats et les dates après le 31/07/2016 pour lesquelles ils ont exactement une activité.

    Ce que tu cherches à faire revient régulièrement sur le forum (chercher les lignes de A pour lesquelles il n'y a pas de ligne dans B ayant certains critères).

    Je te donnes des pistes: LEFT OUTER JOIN, NOT EXISTS... et je te laisse chercher.

    Tatayo.

  6. #6
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Effectivement, ça va mieux quand on cherche avec les bons termes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT DISTINCT(MD.NUMERO) FROM MD_MANDAT MD LEFT JOIN HE_HEURE HE ON MD.ID = HE.MD_MANDAT_ID 
    WHERE  NOT EXISTS (SELECT HE.ID FROM HE_HEURE HE WHERE HE.DATE > '2016-31-07' AND HE.MD_MANDAT_ID = MD.ID)
    Merci pour ton aide

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 262
    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 262
    Points : 12 936
    Points
    12 936
    Par défaut
    Sauf que là tu mélanges un peu tout... A quoi sert la jointure, vu que tu n'utilises pas la table he_heure dans la requête principale ?
    Soit tu utilises une jointure externe, soit une sous-requête.

    Tatayo.

  8. #8
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Ah oui, juste

    Merci

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

Discussions similaires

  1. Requête sur 2 tables ayant une structure différente
    Par Scryll dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/02/2010, 12h50
  2. [AC-2003] Requête sur plusieurs tables dans une seule liste
    Par tarnx dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/12/2009, 11h36
  3. problème sur requête sur 3 tables avec une somme
    Par tomguiss dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/12/2007, 16h44
  4. [Requête] fonction vrai/faux selon une date
    Par syldudu dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/12/2006, 10h12
  5. requête sur l'année d'une date
    Par jo77 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/07/2003, 09h28

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