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 :

Requette access sur intervalle de temps


Sujet :

Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 8
    Points
    8
    Par défaut Requette access sur intervalle de temps
    Bonjour, j'ai une base de donnée hotel à modifier, je n'arrive pas à resoudre cette requette :
    une table client avec un n°client, une date d'arrivée et une date de départ. Je veux compter dans une intervalle de temps (rentré en parametre) le nombre de chambre occupé avec le nom du client.

    Qulqu'un a t'il une solution à proposé ? car je coince depuis plusieur semaines (et je suis debutant)

    Merci

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select N°Client, count(N°Client) 
    from LaTableQuiVaBien
    Where DateDebutResa >= DateDebSelection
    And DateFinResa <= DateFinSelection
    Group By N°Client

  3. #3
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 910
    Points : 4 808
    Points
    4 808
    Par défaut
    Voir la réponse dans sujet :

    http://www.developpez.net/forums/vie...light=#2580473

    Salut,

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Désolé Kloun, mais ta requette je l'ai dejà mais ça ne marche pas.
    En effet, cette requette recupere et compte les cliens ayant réserver sur l'intervale de temps. Je dois en plus calculer le nombre de jour de reservation sur la periode.
    Par exemple si des client ont réservé du 10/03 au 20/03, et que je demande l'intervalle du 15/03 au 30/03, access doit me retourner 5 et le nom du client.

    J'espere que je suis assez clair, merci de votre aide car je coince completement...

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Avec une combinaison de datediff, de min, max et un sum(), ça devrait le faire.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PARAMETERS [dinter] DateTime, [finter] DateTime;
    SELECT nocli,arriv, depart, Val(IIf([depart]<=[finter],[depart],[finter]))-Val(IIf([arriv]<[dinter],[dinter],[arriv])) AS durée
    FROM matable
    WHERE depart>=[dinter] AND arriv<=[finter];

  7. #7
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 910
    Points : 4 808
    Points
    4 808
    Par défaut
    Pour poursuivre ce que t'a suggéré kloun :

    Si je comprend bien tu veux calculer la durée de reservation par client dans un intervalle donné de dates :
    alors la méthode du "crayon-papier" s'impose pour l'étude, car tu as plusieurs cas : le résultat peut être présenté comme une UNION de requetes s'appliquant à ces différents cas , rapidement j'ai distingué 4 cas et je te laisse approfondir:

    dans mon exemple :
    DateDebSelection = #01/10/2006#
    DateFinSelection = #01/23/2006#


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    SELECT [noClient], count([noclient]) AS nbResa, sum([dtFinResa]-[dtDebutResa]) AS dureeJoursResa
    FROM test_resa
    WHERE (dtDebutResa>=#1/10/2006# And dtFinResa<=#1/23/2006#) 
    GROUP BY [noclient]
    UNION
    SELECT [noClient], count([noclient]) AS nbResa, sum([dtFinResa]- #01/10/2006#) AS dureeJoursResa
    FROM test_resa
    WHERE  (dtDebutResa<#1/10/2006# And dtFinResa>=#1/10/2006# And dtFinResa<=#1/23/2006# ) 
    GROUP BY [noclient]
    UNION
    SELECT [noClient], count([noclient]) AS nbResa, sum(#1/23/2006#-[dtDebutResa]) AS dureeJoursResa
    FROM test_resa
    WHERE  (dtDebutResa>=#1/10/2006# AND dtDebutResa<=#1/23/2006# And dtFinResa>#1/23/2006#) 
    GROUP BY [noclient]
    UNION 
    SELECT [noClient], count([noclient]) AS nbResa, sum(#1/23/2006# - #1/10/2006#) AS dureeJoursResa
    FROM test_resa
    WHERE  (dtDebutResa<#1/10/2006# And dtFinResa>#1/23/2006#)
    GROUP BY [noclient]
     
    ORDER BY noclient;
    Espère t'avoir aidé,

  8. #8
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 910
    Points : 4 808
    Points
    4 808
    Par défaut
    Bravo à Random

    Dans un prmier temps, je n'avais pas vu qu'il tenait compte de tous les cas et dans une requete o combien plus succinte !!!

    Bravo encore,

  9. #9
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Désolé, la requette de RANDOM ne marche pas... en effet elle ne prend pas en compte les séjour qui sont à cheval sur la période.
    Par exemple si je veux comme intervalle du 10/02 au 28/02, et qu'il y a un sejour du 5/02 au 15/02 la requette ne le prend pas en compte car il ne se situ pas integralement dans l'intervalle

  10. #10
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 910
    Points : 4 808
    Points
    4 808
    Par défaut
    Ben, désolé, elle marche. ..
    mais en remaniant quelque peu le WHERE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE depart<=[Finter] AND arriv >= [Dinter];
    de meme que le mienne si tu la lis bien ...

    sinon donne ta requete

    Slt

  11. #11
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    salut,

    c'est bien ce que j'ai dans ma requette, voir ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PARAMETERS [date n :] DateTime, [date n+1 :] DateTime;
    SELECT DISTINCTROW ReservationsCH.Societe, Sum(ReservationsCH.PrixCH) AS SommeDePrixCH, Sum(Val(IIf((ReservationsCh.DateF)<=[date n+1 :],(ReservationsCh.DateF),[date n+1 :]))-Val(IIf((ReservationsCh.DateD)<[date n :],[date n :],(ReservationsCh.DateD)))) AS durée
    FROM ReservationsCH
    WHERE (((ReservationsCH.DateD)>=[date n :]) AND ((ReservationsCH.DateF)<=[date n+1 :]))
    GROUP BY ReservationsCH.Societe, ReservationsCH.PrixCH;

    ou [date n :]=[Dinter]
    [date n+1 :]=[Finter]
    DateD = date arrivé
    DateF = date départ

    mod : cafeine,

  12. #12
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 910
    Points : 4 808
    Points
    4 808
    Par défaut
    ben non, cher Skiman

    tu as saisi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((ReservationsCH.DateD)>=[date n :]) AND ((ReservationsCH.DateF)<=[date n+1 :]))
    il te faut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE (((ReservationsCH.DateD)<=[date n+1 :]) AND ((ReservationsCH.DateF)>=[date n :]))
    Slt[/code]

  13. #13
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    ça marche pour les séjour à cheval sur la date d'intervale [date n :], mais il prend toujours pas en compte les sejours à cheval sur la date d'intervalle [date n+1 :]

  14. #14
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 910
    Points : 4 808
    Points
    4 808
    Par défaut
    As tu bien vraiment recopié dans ta nouvelle requette ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE  ...  AND ((ReservationsCH.DateF)>=[date n :]))

  15. #15
    Futur Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Oui, bien sur, mais et c'est justement pour ça que je ne comprend pas pourquoi ça ne marche pas...

  16. #16
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 910
    Points : 4 808
    Points
    4 808
    Par défaut
    J' insiste parce que chez moi ça marche :
    seulement comme je te l'ai dit plus haut je l'ai fait en 2 temps :
    1 - j'extraie mes lignes utiles
    2 - je fais les calculs de regroupements que je veux à partir des resultats de la 1 ere requete.

    A partir du moment, ou ca marchera tu pourras tout mettre dans un seule requette si tu y tiens, moi je yrouve que c'est beaucoup mieux structuré en 2 rq.

    Je te donne mes rq

    1 ere rq appelée rq_RESA_1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PARAMETERS debutInterval DateTime, finInterval DateTime;
    SELECT [noClient], Val(IIf([dtFinResa]<=finInterval,[dtFinResa],finInterval))-Val(IIf([dtDebutResa]>=debutInterval,[dtDebutResa],debutInterval)) AS durée
    FROM test_resa
    WHERE (dtDebutResa<=finInterval And dtFinResa>=debutInterval);
    2 eme requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [noClient], sum([durée]) AS DureeRESA
    FROM rq_RESA_1
    GROUP BY [noclient];
    J'ai remarqué qu'il reste encore un cas à trancher le cas ou le sejour est aux limites de l'intervalle : ex: si la fin de la resa est le 10/01/2006 et tu donnes un intervalle du 10/1/2006 au ... : ici le resultat donne 0 : est-ce que tu veux ? bref c'est tours l'éternel pb des poiriers et des intervelles.

    Slt

Discussions similaires

  1. Mesures sur un intervalle de temps
    Par iza76 dans le forum SSAS
    Réponses: 7
    Dernier message: 08/02/2010, 15h53
  2. Réponses: 3
    Dernier message: 17/09/2008, 17h04
  3. Condition sur intervalles de temps
    Par Christophe Charron dans le forum Débuter
    Réponses: 6
    Dernier message: 13/04/2007, 10h09
  4. Ecrire une requette SQL sur Access
    Par Nadaa dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/05/2006, 14h32
  5. Réponses: 6
    Dernier message: 15/02/2006, 18h06

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