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 :

Système agent/rendez-vous : Requête pour trouver un agent disponible


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 192
    Points : 107
    Points
    107
    Par défaut Système agent/rendez-vous : Requête pour trouver un agent disponible
    Bonjour,

    Je m'y connais en SQL mais pas assez il faut croire pour réussir a faire ce que je veux, un peu d'aide serait la bienvenue..

    Tout d'abord voici les tables simplifiée :

    agent
    idAgent

    rendezvous
    idRendezvous
    dateDebut
    dateFin
    idAgent
    idClient

    je voudrais faire une requête qui récupère les agents qui sont disponibles pour un nouveau rendezvous.
    je dispose donc d'une dateDebutNouveau et d'une dateFinNouveau, et je voudrais avoir les agents qui n'ont PAS de rendezvous dont la dateDebut ou la dateFin serait comprise dans dateDebutNouveau ou dateFinNouveau.

    Merci d'avance pour votre temps,

    Nicolas

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Un début de piste: NOT EXIST, LEFT OUTER JOIN...

    Tatayo.

  3. #3
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Bonjour dumoulex,

    Que pensez-vous de ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * FROM agent 
    WHERE NOT EXISTS (
     SELECT * FROM rendezvous 
     WHERE rendezvous.idAgent = agent.idAgent
     AND (rendezvous.dateDebut > dateDebutNouveau AND rendezvous.dateDebut < dateFinNouveau)
     OR (rendezvous.dateFin > dateDebutNouveau AND rendezvous.dateFin < dateFinNouveau))

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 192
    Points : 107
    Points
    107
    Par défaut
    Alors merci pour les réponses, je fais quelques tests, je pense que le NOT EXIST est la solution, parce que le LEFT JOIN j'ai déjà bien testé et je n'ai pas réussi..

    Je mettrai la requete des que je l'aurai faite.

    Merci bcp

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Avec une jointure externe:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select t1.*
    from Table1 T1
    left outer join Table2 T2 on T1.id2 = T2.Id and T2.Date between '20170101' and '20170301'
    where T2.id is null

    Tatayo.

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 192
    Points : 107
    Points
    107
    Par défaut
    yes !

    Merci tatayo !

    quasi prête à l'emploi. J'avais déjà étudié la jointure LEFT JOIN mais il me manquait le IS NULL dans le where (donc j'avais tous les agents..). là c'est nickel.

    Encore merci,

    merci aussi jcdentons, même SI la jointure a été plus rapide !

    Bonne journée

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par dumoulex Voir le message
    merci aussi jcdentons, même SI la jointure a été plus rapide
    Ce n'est très probablement pas du à la méthode employée, mais plus certainement à la façon de tester les plages de dates, le between utilisé avec la solution basée sur la jointure outer étant plus efficient.

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

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