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

Access Discussion :

Problème de requête sur date [AC-2010]


Sujet :

Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable d'études
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable d'études
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Problème de requête sur date
    Bonjour,

    Je gère une base de données de locaux commerciaux et de leur occupation par les différents commerces qui se succèdent à l'intérieur de ces locaux.

    J'ai donc une table des Locaux où chaque local est unique (clé primaire ID local) avec une adresse et ses coordonnées de géolocalisation.

    J'ai une table Etablissements avec le siret (clé primaire de cette table) qui constitue l'identifiant unique de chaque établissement avec, pour chaque enregistrement, une date de début d'activité et une date de fin d'activité. La date de début d'activité est toujours renseignée, celle de fin d'activité l'est seulement quand l'établissement cesse son activité.

    Quand plusieurs établissements se succèdent à l'intérieur d'un même local il y a toujours cohérence entre les dates d'occupation (pas de chevauchement). Il se peut que le local soit inoccupé, le dernier occupant n'ayant pas été remplacé.

    La relation entre ces deux tables se fait au travers de l'ID local, présent dans les deux (de 1 (table des locaux) vers l'infini (table des établissements).

    Mon problème est le suivant :

    Je voudrais pouvoir obtenir pour chaque local (au travers d'une ou plusieurs requêtes), l'établissement qui l'occupe et est en activité, ou le dernier établissement qui l'a occupé..

    Le résultat attendu est tous les Id Locaux de la table des locaux et le Siret de la table des Etablissements de l'occupant actuel du local ou celui du dernier à l'avoir occupé.

    Je ne sais pas si je suis clair, mais si vous avez une idée, je suis preneur.

    Merci d'avance.

  2. #2
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Voici ma comprehension de la chose
    1. 1 a plusieurs locaux (tLocal)
    1. 1 a plusieurs Etablissement (tEtablissement)

    tu dois donc créer une table contrat de location (tLocation) avec les champs idLocal, idEtablissement, DateDebutContrat, DateFinContrat

    et la tu fait tes requetes sur le contrat de location
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT tLocal.Local, tEtablissement.Siret, tLocation.DateDebutContrat,tLocation.DateFinContrat
    from tLocal right join (from tEtablissement right join on tEtablissement.idLocal = tLocation) on tTlocal.idLocal = tLocation.idLocal

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Responsable d'études
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable d'études
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse !

    Mais j'ai déjà dans ma table Etablissements tous les éléments que tu mets dans la table Location (Id Local, Siret, date de début, date de fin). Et je pense que ta solution fera apparaître tous les siret occupant un même local.

    Je joins un fichier Excel décrivant mon problème et la solution attendue.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    A mon humble avis c'est ça qui ne va pas

    Tu veux faire ça en 2 tables, mais pour moi cette affaire concerne 3 types d'objets:
    - des etablissements qui peuvent louer
    - des locaux a louer
    - un contrat de location

    Ton contrat de location c'est qui loue quoi et comment (tEtablissement.ID, tLocal.ID,DateDébut,DateFin)

  5. #5
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    ce qu'il faut retenir c'est qu'un etablissement est susceptible de louer plusieurs fois le meme batiment. je ne pense pas que c'est une bonne idée de faire l'impasse sur cette table

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Responsable d'études
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable d'études
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Non, un même établissement ne peut occuper qu'un seul local. En revanche un même local peut être occupé successivement par plusieurs établissements différents.

    Et ce que je recherche c'est d'identifier les derniers occupants de chaque local.

  7. #7
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par BenMech Voir le message
    Non, un même établissement ne peut occuper qu'un seul local. En revanche un même local peut être occupé successivement par plusieurs établissements différents.
    un même eétablissement ne peut occuper qu'un seul local en même temps, mais dans le temps il peut louer le local en janvier (par exemple) et le relouer en juillet, non?

    dans ce cas 3 tables et une requete

    Voici ma comprehension de la chose
    1. 1 a plusieurs locaux (tLocal)
    1. 1 a plusieurs Etablissement (tEtablissement)

    tu dois donc créer une table contrat de location (tLocation) avec les champs idLocal, idEtablissement, DateDebutContrat, DateFinContrat

    et la tu fait tes requetes sur le contrat de location
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT tLocal.Local, tEtablissement.Siret, tLocation.DateDebutContrat,tLocation.DateFinContrat
    from tLocal right join (from tEtablissement right join on tEtablissement.idLocal = tLocation) on tTlocal.idLocal = tLocation.idLocal

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Responsable d'études
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable d'études
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Non, un établissement (siret) va occuper un local sur une durée continue avec une date de début et une date de fin. S'il s'arrêtait pendant un temps et revenait dans le même local, il n'aurait pas le même identifiant (siret).

    J'ai bien pensé à une table intermédiaire mais je n'ai pas réussi.

    Je crois qu'il faudrait jouer sur les dates de début d'occupation d'un même local par les occupants successifs en parvenant à ne retenir que la plus récente, mais je ne sais pas faire.

    Je ne suis pas un utilisateur confirmé d'Access comme tu dois t'en douter.

    Merci pour ton aide en tout cas !

  9. #9
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par BenMech Voir le message
    J'ai bien pensé à une table intermédiaire mais je n'ai pas réussi.
    qu'est ce qui coinçait? en meme temps si tu relis les poste je t'ai mis les pistes pour créer ta table intermediaire (tLocation)

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Responsable d'études
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable d'études
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Ai créé la table Location comme tu le suggères.

    Mais quand je crée la requête SQL que tu m'as envoyée, il me signale une erreur de syntaxe dans la clause From !

    Et je suis nul en SQL !

  11. #11
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par BenMech Voir le message
    Ai créé la table Location comme tu le suggères.

    Mais quand je crée la requête SQL que tu m'as envoyée, il me signale une erreur de syntaxe dans la clause From !

    Et je suis nul en SQL !
    Ah oui, mais non c'etait pour ton inspirer pour que ça marche il faudrait que tes 3 tables aient systématiquement les même nom que comme indiqués. comme ça ça va être compliqué. ce que tu peux faire c'est la faire via l'editeur de requete d'access ou tu met les 3 tables et tu lie avec des relations de type tout element de la table location mais uniquement celles des tables Etablissement, batiments identiques

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Responsable d'études
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable d'études
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Je vais essayer ta proposition dès que je pourrai.

    Mais j'ai résolu mon problème en plusieurs étapes finalement.

    J'ai fait une requête sur mes deux tables en prenant l'ID local dans la table des locaux et la Date de début d'occupation en faisant un regroupement sur l'ID local et en utilisant l'opérateur MAX pour la Date de début de contrat. Le résultat ne me donne qu'une seule fois le même ID local avec la date la plus récente de début d'occupation (Requête1).

    J'ai requêté ensuite sur ma table Etablissements en prenant l'ID local, l'ID établissement (unique) et la Date de début d'occupation (Requête2).

    Enfin j'ai requêté sur ces deux requêtes en les jointant sur l'ID local, et en demandant à ce que la Date de début d'occupation de la Requête2 soit égale à celle de la Requête1. Ainsi j'obtiens pour chaque local, l'identifiant du dernier occupant.

    Merci pour ton aide qui m'a fait travailler des neurones.

  13. #13
    Membre habitué Avatar de Gabrieel
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2004
    Messages : 186
    Points : 172
    Points
    172
    Par défaut
    Ok, bon dev

    n'hesites pas a cloturer le message si cela est bon pour toi (en cliquant sur "Résolu")

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

Discussions similaires

  1. [AC-2003] Problème pour créer une requête sur date
    Par fredsgar dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/03/2011, 09h37
  2. [AC-2000] Problème de requête sur une date
    Par egautier18 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 14/10/2010, 13h36
  3. problème de requête sur date de naissance
    Par EdithB dans le forum Requêtes
    Réponses: 1
    Dernier message: 02/11/2007, 21h56
  4. [MySQL] Problème de requête sur des dates
    Par dahu29 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2006, 13h08
  5. Requête sur date
    Par guenfood dans le forum Access
    Réponses: 11
    Dernier message: 08/12/2004, 16h11

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