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 et SQL. Discussion :

Requête pour repérer les chevauchements entre des périodes de temps


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'études
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'études

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 0
    Points
    0
    Par défaut Requête pour repérer les chevauchements entre des périodes de temps
    Bonjour à tous,
    J'ai une table Access, avec un Identifiant client, une date, une heure de début et une heure de fin. J'aimerai repérer pour un même Identifiant et une même date, s'il n'y a pas de créneaux horaires qui se chevauchent. Ci-dessous un petit tableau montrant un exemple :

    Nom : Capture.JPG
Affichages : 329
Taille : 33,9 Ko

    J'aimerais que ma requête me sortent les lignes surlignées en jaune (c'est à dire les périodes se chevauchant). J'espère avoir été clair.
    Merci à tous pour votre aide

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    s'il s'agit de faire un reporting (et non de la saisie) voici une approche:

    - créer une requête de regroupement sur Identifiant et Date qui compte le nombre de record
    - créer une requête d'affichage qui lie la table et le requête de regroupement
    - setup du format conditionnel sur cette requête d'affichage si le comptage>1

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'études
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'études

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par accessisgood Voir le message
    Bonjour,

    s'il s'agit de faire un reporting (et non de la saisie) voici une approche:

    - créer une requête de regroupement sur Identifiant et Date qui compte le nombre de record
    - créer une requête d'affichage qui lie la table et le requête de regroupement
    - setup du format conditionnel sur cette requête d'affichage si le comptage>1
    Oui, il s'agit bien de faire du reporting.

    Je ne comprend pas trop la piste que vous m'avez donné. Si je crée une requête de comptage, il va juste me compter combien de plage horaire il y a dans la journée pour le client (et cela ne me sert à rien). Qu'entendez vous par "setup du format conditionnel" ?

  4. #4
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    740
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 740
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    oui tu as raison, il faut vérifier que pour chaque visite les autres visites du même identifiant à la même date ont soit une date de d'arrivée supérieure aux dates de départ des autres visites, soit une date de départ inférieure aux date d'arrivée des autres visites.

    une approche possible peut se faire par datamacro
    il faut rajouter un champ NoAuto et un champ Chevauche (oui/non) ans la table

    la datamacro Visite.Chevauche met à jour le champ Chevauche en fonction de la règle ci dessus
    Cette datamacro est appellée à la création, la suppression et la modification d'un enregistrement

    le champ Chevauche est ensuite utilisé dans le format conditionnel (comme excel) d'une forme

    ci joint une maquette
    Chevauche.zip

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Si tu veux le faire sans macro de données (datamacro).
    Il faut tester si :

    1. La période considérée commence dans une période existante.
    2. La période considérée fini dans une période existante.
    3. La période considérée commence avant et termine après une période existante.


    Personnellement je ferai 3 colonnes de vérification et une colonne de synthèse des vérifications.
    C'est cette colonne que j'utiliserai pour la mise en forme conditionnelle.

    Cela ressemble à :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select [tblPlage].*, 
    Not insull(DFirst("Clef", "tblPlage", "#" & format([tblPlage].[DateDebutDebut], "yyyy\-mm\-dd hh:nn:ss") & "#"  & " between [DateHeureDebut] and [DateHeureFin]")) as [EstDebutDansPeriodeExistant],
    Not insull(DFirst("Clef", "tblPlage", "#" & format([tblPlage].[DateFinDebut], "yyyy\-mm\-dd hh:nn:ss") & "#"  & " between [DateHeureDebut] and [DateHeureFin]")) as [EstFinDansPeriodeExistant],
    Not insull(DFirst("Clef", "tblPlage", "#" & format([tblPlage].[DateFinDebut], "yyyy\-mm\-dd hh:nn:ss") & "#"  & "<= [DateHeureDebut] and [DateHeureFin]<=" & "#" & format([tblPlage].[DateFinDebut], "yyyy\-mm\-dd hh:nn:ss") & "#")) as [EstEngloblePeriodeExistant], 
    [EstDebutDansPeriodeExistant] or [EstFinDansPeriodeExistant] or [EstEngloblePeriodeExistant] as [EstSuperpose]
    from [tblPlage]

    Dans la mise en forme conditionnelle, tu choisi formule est tu mets :

    ou

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. Requête pour trouver les entrées depuis une liste
    Par deathness dans le forum JPA
    Réponses: 1
    Dernier message: 28/01/2017, 10h20
  2. Réponses: 3
    Dernier message: 04/08/2015, 06h56
  3. Requête pour ecart de date entre des enregistrements successifs
    Par BB72650 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 20/05/2012, 11h55
  4. Requête pour récupérer les noms des tables
    Par cendrine15 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/04/2012, 00h46
  5. Réponses: 1
    Dernier message: 21/07/2006, 05h56

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