Sélection des périodes

Table des matières
  1. Sélection des périodes
    1. Gestion des dates
      1. Dates simples
      2. Dates simples
      3. Démonstration de la méthode l’auto-jointure externe
    2. Chevauchement de période

Gestion des dates

Dates simples

Pour rechercher tous les événements qui ont une date dans une période (ex : toutes les sessions qui débutent entre le 1er janvier 2022 et le 31 mars 2022).

Deux conditions simples :

  • Date xxxx – supérieure ou égale à – 1er janvier 2022 ET
  • Date xxxx – inférieure ou égale à – 31 mars 2022

Exemple :

Dates simples

Pour sélectionner des événements gérés avec une date de début uniquement (ou « date d’effet ») comme les versions des services ou les grades dans l’historique de grades des agents (exemple ci-après). Il est nécessaire de trouver la dernière ligne pour la clé (ex : matricule de l’agent) pour laquelle il n’existe pas de ligne à une date postérieure dans la même table. Pour cela, il faut faire une auto-jointure externe sur la table visée et ne garder que les lignes dans lesquelles la table jointe en externe est vide.

Exemple - dernier grade de l’agent :

  1. Tables :
    • GRH : Agents (A)
    • GRH : Carrières des Agents (B)
    • GRH : Historique des Grades (C)
    • GRH : Historique des Grades (D)
    • Administration : Grades (E)
  2. Champs :
    • Nom (A)
    • Prénom (A)
    • Grade (E)
    • Date d’obtention du Grade (C)
  3. Conditions :
    • N°Agent (A) égal(e) à N°Agent (B)

ET

  • Matricule (B) égal(e) à Matricule (C)

ET

  • Matricule (C) égal(e) à D.MATRICULE_CARRIERE (+)

ET

  • Date d’obtention du Grade (C) strictement inférieur(e) à D.DATE_OBTENTION_GRADE (+)

ET

  • N°Obtention du Grade (D) est vide

ET

  • N°Grade (C) égal(e) à N°Grade (E)

Dans cet exemple, la table « C » est utilisée pour trouver le dernier grade de l’agent et la table « D » est utilisée pour trouver le grade que l’agent aurait obtenu après.

Exemple 2 : dernier grade de l’agent au 31/03/2022

  1. Tables :
    • GRH : Agents (A)
    • GRH : Carrières des Agents (B)
    • GRH : Historique des Grades (C)
    • GRH : Historique des Grades (D)
    • Administration : Grades (E)
  2. Champs :
    • Nom (A)
    • Prénom (A)
    • Grade (E)
    • Date d’obtention du Grade (C)
  3. Conditions :
    • N°Agent (A) égal(e) à N°Agent (B)

ET

  • Matricule (B) égal(e) à Matricule (C)

ET

  • Date d’obtention du Grade (C) inférieur(e) ou égal(e) à ‘2022-03-31’

ET

  • Matricule (C) égal(e) à D.MATRICULE_CARRIERE (+)

ET

  • Date d’obtention du Grade (C) strictement inférieur(e) à D.DATE_OBTENTION_GRADE (+)

ET

  • Date d’obtention du Grade (D) inférieur(e) ou égal(e) à ‘2022-03-31’ (+)

ET

  • N°Obtention du Grade (D) est vide

ET

  • N°Grade (C) égal(e) à N°Grade (E)

Le principe est quasi-identique : il suffit d’ajouter deux conditions pour ne conserver que les grades obtenus en table « C » et « D » avant la date butoir. Attention : ne pas oublier que la table « D » est en jointure externe, il faut que la condition butoir soit également dans cette jointure externe sans quoi la recherche serait faussée (la date d’obtention de « D » ne peut pas à la fois être vide et inférieure ou égale à une date butoir).

Autre méthode possible : Une autre manière de procéder, sans jointure externe, est d’utiliser deux fois la table en auto-jointure mais en ajoutant une condition fonctionnelle :

  • Plus grand Date d’obtention du Grade (D) égal(e) à Date d’obtention du Grade (C)

Démonstration de la méthode l’auto-jointure externe

Soit l’historique de grade « H » :

Avec une auto-jointure interne : H1.Matricule = H2.Matricule ET H1.DateObtention < H2.DateObtention

Problème : La ligne « Cap » a disparu.

Avec une auto-jointure externe : H1.Matricule = H2.Matricule (+) ET H1.DateObtention < H2.DateObtention (+)

Avec une auto-jointure externe et la clause « est vide » : H1.Matricule = H2.Matricule (+) ET H1.DateObtention < H2.DateObtention (+) ET H2.DateObtention est vide

La requête affiche le dernier grade de l’agent

Chevauchement de période

Pour sélectionner tous les événements ayant des dates de début/fin en chevauchement avec la période de recherche. Ici, sont donc recherchés :

a. Les événements qui commencent avant la période et terminent après la période (barre verte au milieu/centre) ;

b. Les événements qui commencent avant la période et terminent pendant la période (barre verte en haut à gauche) ;

c. Les événements qui commencent pendant la période et terminent pendant la période (barre verte en haut à droite) ;

d. Les événements qui commencent pendant la période et terminent après la période (barre verte en bas/centre).

Sont exclus :

e. Les événements qui commencent et terminent avant le début de période (barre rouge de gauche) ;

f. Les événements qui commencent et terminent après la fin de période (barre rouge de droite).

Soit :

Les événements en rouge sont exclus de la recherche, les événements en vert sont inclus dans la recherche.

Par la suite, pour simplifier la lecture, nous admettrons :

  • « DébutEvénement » est la date de début d’un événement ;
  • « FinEvénement » est la date de fin du même événement ;
  • « DébutRecherche » est la date de début de la période de recherche ;
  • « FinRecherche » est la date de fin de la période de recherche.

Intuitivement, les conditions seraient les suivantes (dans le même ordre) :

a. DébutEvénement ≤ DébutRecherche ET FinEvénement ≥ FinRecherche ;

OU

b. DébutEvénement ≤ DébutRecherche ET FinEvénement ≥ DébutRecherche ET FinEvénement ≤ FinRecherche ;

OU

c. DébutEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinRecherche ET FinEvénement ≥ DébutRecherche ET FinEvénement ≤ FinRecherche ;

OU

d. DébutEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinRecherche ET FinEvénement ≥ FinRecherche.

Deux postulats à conserver, permettent de réduire ces écritures, ils sont basés sur un seul postulat « Début ≤ Fin », c’est-à-dire :

  • La date de début de chaque événement (DébutEvénement) est antérieure ou égale à sa date de fin (FinEvénement) ;
  • La date de début de la période de recherche (DébutRecherche) est antérieure ou égale à sa date de fin (FinRecherche).

Il est donc possible de récrire « a » de la manière suivante :

1) DébutEvénement ≤ DébutRecherche ET FinEvénement ≥ FinRecherche ;

Soit

2) DébutEvénement ≤ DébutRecherche ≤ FinRecherche ET FinEvénement ≥ FinRecherche ≥ DébutRecherche ;

Soit

3) DébutEvénement ≤ FinRecherche ET FinEvénement ≥ DébutRecherche.

Ceci est également vérifiable sur la frise chronologique précédente : le début de l’événement est antérieur à la fin de la recherche et la fin de l’événement est postérieur au début de la recherche.

Il est possible de réécrire « b » de la manière suivante :

1) DébutEvénement ≤ DébutRecherche ET FinEvénement ≥ DébutRecherche ET FinEvénement ≤ FinRecherche ;

Soit

2) DébutEvénement ≤ DébutRecherche ≤ FinRecherche ET FinEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinEvénement ≤ FinRecherche ;

Soit

3) DébutEvénement ≤ FinRecherche ET FinEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinRecherche

Soit (les conditions bleue et orange étant identiques)

4) DébutEvénement ≤ FinRecherche ET FinEvénement ≥ DébutRecherche.

Les expressions « a » et « b » peuvent donc se récrire de la même manière, elles sont ainsi identiques.

Il est possible de réécrire « c » de la manière suivante :

1) DébutEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinRecherche ET FinEvénement ≥ DébutRecherche ET FinEvénement ≤ FinRecherche ;

Soit

2) FinEvénement ≥ DébutEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinRecherche ET FinEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinEvénement ≤ FinRecherche ;

Soit

3) FinEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinRecherche ET FinEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinRecherche ;

Soit (les conditions bleue et orange étant identiques et les conditions verte et ocre étant identiques)

4) FinEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinRecherche.

Les expressions « a », « b » et « c » peuvent donc se récrire de la même manière, elles sont ainsi identiques.

Il est possible de réécrire « c » de la manière suivante :

1) DébutEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinRecherche ET FinEvénement ≥ FinRecherche ;

Soit

2) FinEvénement ≥ DébutEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinRecherche ET FinEvénement ≥ FinRecherche ≥ DébutRecherche ;

Soit

3) FinEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinRecherche ET FinEvénement ≥ DébutRecherche ;

Soit (les conditions bleu et orange étant identiques)

4) FinEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinRecherche.

Une dernière fois, les expressions « a », « b », « c » et « d » peuvent donc se récrire de la même manière, elles sont ainsi identiques.

Une seule expression exprime donc les 4 :

FinEvénement ≥ DébutRecherche ET DébutEvénement ≤ FinRecherche

Pour simplifier sa lecture et sa mémorisation, elle peut être réécrite :

DébutRecherche ≤ FinEvénement ET DébutEvénement ≤ FinRecherche

Moyen mnémotechnique : « début avant fin ET début avant fin ; et on croise les dates ».