- Ymox,
Bonjour à tous !
Ma prise de tête du moment consiste à tenter d’effectuer des requêtes pour vérifier que différents éléments (ayant une date de de début et une de fin), mis dans l’ordre chronologique, forment une suite continue de jours, afin de vérifier que cette suite couvre bien une certaine période. Ces éléments sont liés à des personnes, et je dois donc retourner les personnes selon ce critère de continuité.
Il y a évidemment d’autres critères pour sélectionner ces périodes (des statuts), mais je pense que je devrais arriver à les insérer dans la version finale.
Pour exemple, mettons que j’ai des données similaires à celles dans le tableau ci-dessous.
Personne |
Début |
Fin |
Début d’élément |
Fin d’élément |
---|---|---|---|---|
Pierre |
2018-10-16 |
2018-10-26 |
2018-10-16 |
2018-10-18 |
2018-10-18 |
2018-10-26 |
|||
Paul |
2018-10-16 |
2018-10-26 |
2018-10-17 |
2018-10-18 |
2018-10-18 |
2018-10-26 |
|||
Marie |
2018-10-17 |
2018-10-26 |
2018-10-17 |
2018-10-18 |
2018-10-18 |
2018-10-24 |
|||
Alice |
2018-10-16 |
2018-10-26 |
2018-10-16 |
2018-10-18 |
2018-10-20 |
2018-10-26 |
L’idée est donc de sortir soit Pierre, pour qui :
- la date de début est plus grande ou égale à la date de début du premier élément ;
- la date de fin est plus petite ou égale la date de fin du dernier élément ;
- la date de fin d’un élément coïncide avec (ou est plus grande que) celle de début d’un autre élément.
Ou à l’inverse, sortir Paul, Marie ou Alice :
- soit parce que la date de début est plus petite que la date de début de tous ses éléments ;
- soit parce que la date de fin est plus grande que la date de fin de tous ses éléments ;
- soit parce que la période couverte par tous les éléments n’est pas continue, typiquement :
- un des éléments a sa date de fin qui :
- est plus petite que la fin "globale" ;
- ne coïncide avec aucune date de début d’un autre élément.
- un des éléments a sa date de début qui :
- est plus grande que le début "global" ;
- ne coïncide avec aucune date de fin d’un autre élément.
- un des éléments a sa date de fin qui :
Je pense que je peux m’en sortir avec pas mal de ces critères :
- pour savoir si on a au moins un élément qui commence à (ou avant) la date de début globale, une jointure depuis ma personne vers les éléments, jointure avec un "critère renforcé" et la vérification ;
- similairement pour voir si on a un élément qui s’arrête à (ou après) la date de fin globale.
Ce qui me manque actuellement, c’est cette histoire de comparaison entre deux éléments — dans le cas de Pierre comme dans l’autre — sachant que, histoire de ne pas faire simple, je peux avoir des éléments qui se chevauchent (si on prend le cas de Pierre, la date de fin du premier élément serait le 20, et Pierre répondrait toujours aux critères de "continuité"), et que je n’ai évidemment pas toujours deux éléments ?
Merci d’avance