Bonjour à tous,
Soit une table avec des abonnements comprenant un début et une fin, sur des intervalles couvrant éventuellement plusieurs années. Le Problème est d'effectuer des requêtes pour savoir qui était abonné entre une date de début et une date de fin données (ces début et fin étant éventuellement confondus)
Il me semble qu'il y a 4 cas possibles, illustrés ci-dessous: les dates de début et de fin de période encadrant les dates de début ou de fin d'abonnement (1 et 2), la période s'étendant avant et après l'abonnement (3) ou au contraire incluse dans l'abonnement.
Il y a de plus un cas particulier: des abonnements en cours dont on connaît le début mais pas la fin, ce champs étant alors NULL.
Voici la sélection sur les dates que j'ai retenue à présent, les mots débuts et fin étant à remplacer par les dates délimitant la période recherchée. tout ça me semble quand même un peu lourd.. Tout avis est bienvenu; y voyez-vous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 abonnements 2003 ---------------------- 2006 2003------------------------------------------------NULL périodes: 1er cas 2002----------------------2005 2ème 2005-------------------2008 3ème 2002---------------------------------------------2008 4ème 2004---------2005
des risques d'erreurs, voyez-vous une solution plus intéressante ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SELECT * FROM abonnement WHERE ( ( (YEAR(abonnement.debut) BETWEEN début AND fin) OR (YEAR(abonnement.fin) BETWEEN début AND fin) OR (début BETWEEN YEAR(abonnement.fin) AND YEAR(abonnement.debut)) ) OR (YEAR(abonnement.debut) <= fin AND abonnement.fin IS NULL) )
Merci d'avance
Partager