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

Contribuez Discussion :

Générer des dates comprises entre une date de début et de fin


Sujet :

Contribuez

  1. #1
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 410
    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 410
    Points : 19 984
    Points
    19 984
    Billets dans le blog
    66
    Par défaut Générer des dates comprises entre une date de début et de fin
    Bonjour,

    J'ouvre ce sujet, suite à une question intéressante que m'a posée unice et qui pourrait intéresser d'autres personnes :

    Citation Envoyé par unice
    ...
    Est-il possible d'extraire à l'aide d'une requête des dates qui se trouvent dans une table (congé) dont les champs sont [DateDebut] et [DateFin]. Ex : congé du 07/11/2016 au 10/11/2016 je souhaiterais afficher les dates du 08,09 et 10 novembre à l'aide de cette requête.
    Je retrouve bien le nombre de jours mais pas la date....
    De façon générale, voici coment je fais pour avoir les dates comprises entre [DateDebut] et [DateFin] :

    Je dispose donc d'une table T_Planning avec les champs [DateDebut] et [DateFin].

    Je crée ensuite une table d'indices nommée T_IndiceJour (IndiceJour) contenant des entiers compris par exemple entre 1 et 31 (mais on peut imaginer un intervalle plus important).

    Ensuite, je réalise une sorte de produit cartésien entre ces 2 tables dans une requête dont voici le SQL :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_Planning.IdPlanning, T_Planning.Memo, [DateDebut]+[IndiceJour]-1 AS DateJour
    FROM T_IndiceJour, T_Planning
    WHERE (T_IndiceJour.IndiceJour)<=DateDiff("d",[DateDebut],[DateFin])+1
    ORDER BY T_Planning.IdPlanning, [DateDebut]+[IndiceJour]-1;

    Cette requête va donc générer pour chaque IdPlanning les dates comprises entre [DateDebut] et [DateFin].

    Cdlt,
    Fichiers attachés Fichiers attachés

  2. #2
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 219
    Points : 85 103
    Points
    85 103
    Billets dans le blog
    15
    Par défaut
    User,

    Merci pour ce partage, nul doute que cela profitera à plus d'un membre

    Toutefois, je le verrais bien dans le sous-forum Contribuez. Q'en penses-tu ?

    Cordialement

  3. #3
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Bonjour Denis,


    T_IndiceJour (IndiceJour) contenant des entiers compris par exemple entre 1 et 31 (mais on peut imaginer un intervalle plus important).
    En fait cet intervalle doit être au moins égal (au nombre de jours qu'il peut y avoir entre un début et sa fin) + 1.

    Donc ça marche si, a priori, on connait ce nombre.

    pour l'idée du produit cartésien.

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 410
    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 410
    Points : 19 984
    Points
    19 984
    Billets dans le blog
    66
    Par défaut
    Citation Envoyé par Malick SECK
    Merci pour ce partage, nul doute que cela profitera à plus d'un membre

    Toutefois, je le verrais bien dans le sous-forum Contribuez. Q'en penses-tu ?

    Cordialement
    Salut Malick,

    Merci pour l'idée, je l'ai transféré

    Citation Envoyé par ClaudeLELOUP
    En fait cet intervalle doit être au moins égal (au nombre de jours qu'il peut y avoir entre un début et sa fin) + 1.

    Donc ça marche si, a priori, on connait ce nombre.
    Salut Claude,

    Tu fais bien de le préciser

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Peut-être placer cette requête avant pour signaler le problème, s'il survient :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP 1 IIf([DateFin]-[DateDebut]<DCount("*","T_Indicejour"),"OK",[DateFin]-[DateDebut]+1) AS MinimumNécessaireIndices
    FROM T_Planning
    ORDER BY [DateFin]-[DateDebut] DESC;

    Qui donnerait ceci :


  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 410
    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 410
    Points : 19 984
    Points
    19 984
    Billets dans le blog
    66
    Par défaut
    Citation Envoyé par ClaudeLELOUP Voir le message
    Peut-être placer cette requête avant pour signaler le problème, s'il survient :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP 1 IIf([DateFin]-[DateDebut]<DCount("*","T_Indicejour"),"OK",[DateFin]-[DateDebut]+1) AS MinimumNécessaireIndices
    FROM T_Planning
    ORDER BY [DateFin]-[DateDebut] DESC;

    Qui donnerait ceci :

    Oui, en effet, on a pas toujours une idée précise de la période de plus longue durée, et en plus ça peut être compliqué de tout vérifier à l'œil, sans compter les nouvelles données qui vont être remplies

  7. #7
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 410
    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 410
    Points : 19 984
    Points
    19 984
    Billets dans le blog
    66
    Par défaut Générer des événements récurrents compris entre une date de début et de fin
    Bonjour à tous,

    J'applique cette méthode pour générer des rendez-vous périodiques en ajoutant dans la requête un test pour voir si je jour généré est périodique ou pas, et 2
    paramètres (DateDebut, DateFin) pour filtrer les données sur une certaine période,
    Nom : generer_events_recurrents.jpg
Affichages : 658
Taille : 362,3 Ko

    J'ajoute également un formulaire pour ajouter les événements et définir leur période, plus un module avec une fonction pour tester la périodicité des événements (fonction qui peut-être simplifiée).

    Le nombre d'indices est à 1000, qui représentent plus de 2 années, mais dans l'absolu on peut tester si ce nombre est suffisant avec la requête de Claude :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TOP 1 IIf(nz([DateFinPeriodicite],#01/01/3000#)-[DateDebutPeriodicite]<DCount("*","T_Indicejour"),"OK",nz([DateFinPeriodicite],#01/01/3000#)-[DateDebutPeriodicite]+1) AS MinimumNécessaireIndices
    FROM T_Evenement
    ORDER BY nz([DateFinPeriodicite],#01/01/3000#)-[DateDebutPeriodicite] DESC;

    Bons tests,
    Cdlt,
    Fichiers attachés Fichiers attachés

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut


    (nz([DateFinPeriodicite],#01/01/3000#) 

    Tu nous prépares le bug de l'an 3000 !

    D'ici là, passe de joyeuses fêtes !

  9. #9
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 410
    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 410
    Points : 19 984
    Points
    19 984
    Billets dans le blog
    66
    Par défaut
    Citation Envoyé par ClaudeLELOUP Voir le message


    (nz([DateFinPeriodicite],#01/01/3000#) 

    Tu nous prépares le bug de l'an 3000 !

    D'ici là, passe de joyeuses fêtes !
    Merci !

    Je suis surtout optimiste

    Passe de bonnes fêtes également !

Discussions similaires

  1. [XL-2013] Somme des cellules comprises entre deux dates
    Par meteo_man dans le forum Excel
    Réponses: 18
    Dernier message: 17/05/2016, 23h32
  2. Réponses: 6
    Dernier message: 27/09/2014, 14h18
  3. trouver une date comprise entre plusieurs lignes
    Par dinette dans le forum SQL
    Réponses: 1
    Dernier message: 12/01/2010, 20h50
  4. Réponses: 2
    Dernier message: 21/03/2007, 16h06
  5. afficher les dates comprisent entre deux dates
    Par hugobob dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/10/2006, 11h53

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