Il est difficile de suggérer des modifications à un schéma sans aucun détail, mais il y a un moyen de le faire. Ce que vous avez est une entrée qui dit "à partir de cette date, l'heure de la réunion est ce jour à ce moment."
EffDate DOW Time
01/01/2017 Mon 0900
03/14/2017 Mon 1000
03/21/2017 Mon 0900
À partir du premier jour de l'horaire, le 1er janvier, la réunion aura lieu le lundi à 9h. Puis, à partir du mardi avant qu'il ne prenne effet, la réunion le lundi suivant (le 20) sera à 10h. En recommençant le 21, l'heure de la réunion revient à 9h.
La requête pour faire ce travail semble un peu compliquée, mais suivez la logique et il devrait être évident.
select Dow "Day of meeting", Time
from MeetingSchedule ms
where ms.EffDate =(
select Max(ms1.EffDate)
from MeetingSchedule ms1
where ms1.EffDate <= Today()
);
Si cette requête est exécutée tout moment à compter du 1er janvier au juste avant le 14 Mar (qui est un mardi), le retour affichera lundi à 9 heures. À partir du lendemain et pour une semaine entière, le retour sera montré lundi à 10h. Puis, à partir du jour suivant (et à partir de ce moment-là), l'heure sera à nouveau affichée à 9h.
Bien sûr, vous voudrez peut-être savoir quelle sera l'heure de la réunion un lundi donné. La date ira dans une variable qui remplacera la fonction retournant la date d'exécution.
select :DateOfInterest "Week starting", Dow "Day of meeting", Time
from MeetingSchedule ms
where ms.EffDate =(
select Max(ms1.EffDate)
from MeetingSchedule ms1
where ms1.EffDate <= :DateOfInterest
);
En supposant que vous passez par une boucle générant les dates des dimanches consécutifs, la sortie ressemblera à ceci pour le mois de Mars:
Week starting Day of meeting Time
03/05/2017 Mon 0900
03/12/2017 Mon 0900
03/19/2017 Mon 1000
03/26/2017 Mon 0900
Mais la bonne réponse sera donnée à toute date postérieure la dernière réunion avant le changement à la date de la réunion elle-même. Si l'heure devait changer à 10h à partir de ce moment, éliminez simplement la dernière rangée, qui revient à 9h du matin.
J'ai ajouté le jour de la semaine, mais vous pouvez le laisser de côté si vous savez que la réunion sera toujours, toujours un lundi.