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 sur dates


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 48
    Points
    48
    Par défaut Requête sur dates
    Bonjour à toutes et à tous,

    Je travaille sur Access 2010 et voici mon souci.

    J’ai une table avec des noms date entrée et date de sortie etc

    Dans une requête j’ai des dates d’entrées :
    Exemple
    DateEntree
    02/11/2010
    29/07/2011
    05/05/2011
    07/07/2011
    13/07/2011

    Je souhaiterais connaître le nombre total de jours effectués entre le 01/07/2011 et 31/07/2011
    Dans ma requête regroupement, deux champs
    DateEntree avec comme critère entre #01/07/2011# et #31/07/2011#
    Champ calculé : nbrejour: Somme(#31/07/2011#-[DateEntree])
    J’obtiens :
    DateEntree nbrejour
    07/07/2011 24
    13/07/2011 18
    29/07/2011 2

    Je devrais obtenir
    02/11/2010 30
    29/07/2011 2
    05/05/2011 30
    07/07/2011 24
    13/07/2011 18

    Soit un total de 104 jours

    Pouvez-vous m’aider à résoudre ce problème.

    Merci à tous

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Le nombre total de jour entre deux dates est donc une différence.

    Voilà un tuto à lire : http://mhubiche.developpez.com/vba/f...ions/datetime/

    Et cette partie : http://mhubiche.developpez.com/vba/f...tetime/#LIII-D

    La fonction DateDiff est à voir, une recherche sur le forum avec cette fonction te donnera un nombre important de trucs et astuces.

    Philippe

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 402
    Points : 19 833
    Points
    19 833
    Billets dans le blog
    66
    Par défaut
    Oui,

    Je dirais comme Philippe que la fonction DateDiff est une clé du problème, mais que ce genre de problème est en général assez tordu pour un non initié

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 48
    Points
    48
    Par défaut Requête sur dates
    Bonjour,

    Comme conseillé je suis allé voir sur le forum et voici mon premier essai (ce n’est pas évident effectivement pour une non initiée)

    Requête
    Champs jours: jours :VraiFaux([DateEntree]>#01/07/2011#;DiffDate("j";#01/07/2011#;[DateEntree]);DiffDate("j";[DateEntree];#01/07/2011#))

    Champs jours 2 :
    jours2: vraiFaux([DateEntree]>#31/07/2011#;DiffDate("j";#31/07/2011#;[DateEntree]);
    DiffDate("j";[DateEntree];#31/07/2011#))

    Champs total jours :
    total jours : vraiFaux([jours2]<[jours];[jours2];VraiFaux([DateEntree]<#31/07/2011#;Abs([jours2]-[jours]);[jours2]))

    J’obtiens :
    Requête1
    DateEntreeCHRS jours jours2 tota2l jours
    07/07/2011 6 24 18
    13/07/2011 12 18 6
    02/08/2011 32 0 0
    05/05/2011 57 87 30
    29/07/2011 28 2 2
    29/08/2011 59 0 0
    02/11/2010 241 271 30
    06/12/2010 207 237 30



    Le résultat est juste mais cela me semble bien compliqué ! Y-a-t ’il une autre méthode qui me permettrai d’obtenir directement la somme soit 116 jours.

    De plus si je dois modifier les dates d’intervalles ici du 1er juillet au 31 juillet et demander du 1er janvier au 31 juin obligation de venir modifier les formules. Requête paramétrée impossible dans ce cas ?

    Merci encore pour votre aide.

  5. #5
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 402
    Points : 19 833
    Points
    19 833
    Billets dans le blog
    66
    Par défaut
    Re,

    Et tu ne te sers pas du champ DateSortie ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 48
    Points
    48
    Par défaut
    Merci,

    Je crois que je suis allé un peu vite, effectivement j'ai oublié la date de sortie.

    Mais est-ce que mon raisonnement est juste ? n'y a t-il pas une méthode plus rapide pour arriver à ce résultat ?

    Merci

  7. #7
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 402
    Points : 19 833
    Points
    19 833
    Billets dans le blog
    66
    Par défaut
    Re,

    Est-ce que tu connais le VBA ?

    A+

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 402
    Points : 19 833
    Points
    19 833
    Billets dans le blog
    66
    Par défaut
    En gros l'idée est la suivante :

    Suppose que Date1 est le 1er jour du mois
    et Date2 le dernier jour du mois.

    Alors il faut énumérer les cas possibles :

    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
     si (Date1 <= DateEntree) et (Date2 >= DateSortie) alors
     
          CompteJours = DateDiff("d", DateEntree, DateSortie)
     
      sinon si (Date1 > DateEntree) et (Date2 <= DateSortie) alors
     
          CompteJours = DateDiff("d", Date1, Date2)
     
       sinon si (Date1 > DateEntree) et (Date1 < DateSortie) alors
     
          CompteJours = DateDiff("d", Date1, DateSortie)
     
       sinon si (Date2 > DateEntree) et (Date2 <= DateSortie) alors
     
          CompteJours = DateDiff("d", DateEntree, Date2)
     
       fin si
    Est-ce que tu comprends ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    Merci beaucoup pour votre aide. Je connais un petit peu VBA sur Excel.

    Je pense qu'ici il faut utiliser If Then.....

    Je vais donc essayé et vous tiens au courant.

    encore merci

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    Désolée de reprendre le fil seulement aujourdh'ui, mais j'ai dû faire un petit séjour à l'hopital..... Veuillez m'excuser.

    J'ai préparé ce bout de code comme conseillé mais je ne sais pas du tout ou le mettre. En clair je ne sais pas lancer une requête en VBA. J'ai vu la commande Docmd pour ouvrir un formulaire mais la j'avoue je sèche.

    voici le texte du code

    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
    If(Date1<=DateEntree) et (Date2>=DateSortie) Then
     
                Comptejours=DateDiff("d",DateEntree,DateSortie
     
    ElseIf (Date1>DateEntree) and (Date2<=DateSortie Then
     
        Comptejours=Datediff(“d”,Date1,Date2)
     
    ElseIf ((Date1 > DateEntree) and (Date1 < DateSortie) Then
     
        CompteJours = DateDiff("d", Date1, DateSortie)
     
    ElseIf (Date2 > DateEntree) and (Date2 <= DateSortie) Then
     
                 CompteJours = DateDiff("d", DateEntree, Date2)
     
    End If

  11. #11
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 402
    Points : 19 833
    Points
    19 833
    Billets dans le blog
    66
    Par défaut
    Salut,

    Procédons par étape :

    D'abord il te faut créer un module :

    Onglet "Module", puis nouveau...

    Puis, dans le module mettre le code de la fonction :

    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
     
    Function Comptejours (Date1 as date,Date2 as date,DateEntree as date,DateSortie as Date) as long 
     
    If(Date1<=DateEntree) et (Date2>=DateSortie) Then
     
        Comptejours=DateDiff("d",DateEntree,DateSortie)
     
    ElseIf (Date1>DateEntree) and (Date2<=DateSortie) Then
     
        Comptejours=Datediff("d",Date1,Date2)
     
    ElseIf ((Date1 > DateEntree) and (Date1 < DateSortie) Then
     
        CompteJours = DateDiff("d", Date1, DateSortie)
     
    ElseIf (Date2 > DateEntree) and (Date2 <= DateSortie) Then
     
        CompteJours = DateDiff("d", DateEntree, Date2)
     
    End If 
     
    End function
    A+

    Denis

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 48
    Points
    48
    Par défaut
    tout d'abord encore merci pour ton aide

    comme expliqué, j'ai copié le code dans un module de ma base. Comment utiliser cette fonction ? Merci et bonne journée

  13. #13
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 402
    Points : 19 833
    Points
    19 833
    Billets dans le blog
    66
    Par défaut
    Salut,

    Dans une requête tu crées un champ calculé comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Jours : Comptejours(DateSerial([Annee];[Mois];1);DateSerial([Annee];[Mois]+1;0);[DateEntree];[DateSortie])
    Ici je suppose que ta requête a 2 paramètres : [Mois] et [Année]

    et ta table source à 2 champs : [DateEntree] et [DateSortie].

    A l'ouverture elle va te demander les 2 paramètres [Mois] et [Année], tu rentres par exemple 7 et 2011 et tu me dis ce qu'il se passe...

    A+

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 48
    Points
    48
    Par défaut
    bonjour,

    lorsque je lance la requête il m'est demandé de rentrer l'année le mois puis dateentrée et datesortie

    je rentre 2011 puis 7 pour le mois
    dateentree 01/01/2011
    datesortie 31/07/2011
    le résultat me donne

    Dateentree DateSortie jours
    07/07/2011 12/07/2011 0
    13/07/2011 28/07/2011 0
    02/08/2011 0
    05/05/2011 12/06/2011 0
    29/07/2011 16/08/2011 0
    29/08/2011 14/09/2011 0
    02/11/2010 20/07/2011 0
    06/12/2010 09/10/2011 0

    je souhaiterais obtenir la somme des jours entre le 1er juillet et le 31 juillet

    Date1 et Date2 étant modifiables soit du 1er juin au 31 aout etc

    encore merci

  15. #15
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 402
    Points : 19 833
    Points
    19 833
    Billets dans le blog
    66
    Par défaut
    Re,

    Peux-tu me donner la liste des champs de ta table source ?

    Merci,

    Sinon pour choisir Date1 et Date2, il faut mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Jours : Comptejours(Date1;Date2;[DateEntree];[DateSortie])
    Sous réserve que les champs [DateEntree] et [DateSortie] existe dans la table source...

    A+

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 48
    Points
    48
    Par défaut
    voici la liste des champs de la table source et table lien

    Merci

    T_Lien_DateEntree

    ID(clé primaire)
    IDResidant
    IDTypeAccueil
    DateEntree
    DateSortie
    IDMotifSortie
    TotalSéjour


    Table: T_Résidants

    IDRésidants (clé primaire
    IDDateEntreeCHRS
    Dossier_Ouvert_par
    DateEntretien
    Nom
    Prénom
    Autres Prénoms
    DateEntree
    DateSortie

  17. #17
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 402
    Points : 19 833
    Points
    19 833
    Billets dans le blog
    66
    Par défaut
    Salut,

    Tu as [DateEntree] et [DateSortie] dans les 2 tables, il peut y avoir confusion...

    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Jours : Comptejours(Date1;Date2;T_Lien_DateEntree.[DateEntree];T_Lien_DateEntree.[DateSortie])
    A+

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    Effectivement les champs DateEntree et DateSortie ne devaient se trouver dans la table résidants Merci.

    Dans cette requête je ne souhaite pas renseigner la date d'entrée et la date de sortie. Je veux juste calculer le nombre de jours de présence sur une période donnée.


    Encore merci et bonne journée

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 48
    Points
    48
    Par défaut requête sur date
    bonjour à toutes et à tous,

    Il y a quelque temps vous m'aviez aidé pour le code d'une requête avec champs dates. Jusqu'à présent les champs dates étaient toujours remplis (à tort). Maintenant je rencontre un problème lorsque j'exécute ma requête les enregistrements qui n'ont pas de date de sortie indiquent Erreur. Voici le code :

    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
    Function CompteJours1(Date1 As Date, Date2 As Date, DateEntree As Date, DateSortie As Date) As Long
     
    If (Date1 < DateEntree) And IsNull(DateSortie) Then
       CompteJours1 = DateDiff("d", DateEntree, Date2)
    ElseIf (Date1 > DateEntree) And IsNull(DateSortie) Then
       CompteJours1 = DateDiff("d", Date1, Date2)
    ElseIf (Date1 <= DateEntree) And (Date2 >= DateSortie) Then
        CompteJours1 = DateDiff("d", DateEntree, DateSortie)
    ElseIf (Date1 > DateEntree) And (Date2 <= DateSortie) Then
        CompteJours1 = DateDiff("d", Date1, Date2)
    ElseIf (Date1 > DateEntree) And (Date1 < DateSortie) Then
        CompteJours1 = DateDiff("d", Date1, DateSortie)
    ElseIf (Date2 > DateEntree) And (Date2 <= DateSortie) Then
        CompteJours1 = DateDiff("d", DateEntree, Date2)
    ElseIf (Date2 >= DateEntree) And (Date2 < DateSortie) Then
        CompteJours1 = DateDiff("d", DateEntree, Date2)
    ElseIf (Date1 < DateEntree) And (Date2 < DateSortie) Then
        CompteJours1 = 0
    ElseIf (Date2 < DateEntree) Then
         CompteJours1 = 0
     
    End If
    Je ne vois pas où est l'erreur Merci pour votre aide

Discussions similaires

  1. [REQ] Requête sur date et heure
    Par benazerty dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 26/06/2006, 13h34
  2. [sql server] requête sur dates et heures (format du résultat
    Par isachat666 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/02/2006, 13h48
  3. Requète sur dates compliquée ...
    Par itklif2 dans le forum Requêtes
    Réponses: 7
    Dernier message: 28/11/2005, 23h31
  4. [ADO] Requète sur dates
    Par cdlr27 dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/01/2005, 22h39
  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