OVH Cloud OVH Cloud

Selection de periodes reservées

3 réponses
Avatar
TopBidouille
Re Bonjour,

j'expose mon probleme :
j'ai une table SemaineReservee qui contient des périodes de réservations :
SemaineReservee(IdSemaineReservee,DdebutPeriode,DFinPeriode,...)

je voudrai pouvoir resortir de cette table les lignes qui sont libres entre
2 dates :
par exemple je voudrai connaitre les periodes libres (donc non reservées)
entre le 01/06/04 et le 15/06/04

je fais donc :
select * from SemaineReservee where cpsemainereserve
not in(
select cpsemainereserve from SemaineReservee semaine
where (ddebut>='01/06/04' and dfin<='15/06/01'))

j'ai effectivement des enregistrements "bons" : je ressorts des lignes
DDebut 26/06/04 et Dfin 28/08/04 (effectivement cette periode est libre
entre le 01/06/04 et 15/06/04) mais j'ai egalement des résultats qui ne me
vont pas : Ddebut: 01/06/04 Dfin : 30/09/04.
il me manque des conditions mais comment etre sur de ne pas en louper.
Si quelqu'un a déja eu ce type de problèmes...et a sa solution, je suis
preneur

Merci
Christophe

3 réponses

Avatar
TopBidouille
Oups, c'est parti trop vite
j'avais oublié d'enlever les periodes "plus grandes " que celle voulu
Désolé
"TopBidouille" a écrit dans le
message de news:c24o4c$p28$
Re Bonjour,

j'expose mon probleme :
j'ai une table SemaineReservee qui contient des périodes de réservations :
SemaineReservee(IdSemaineReservee,DdebutPeriode,DFinPeriode,...)

je voudrai pouvoir resortir de cette table les lignes qui sont libres


entre
2 dates :
par exemple je voudrai connaitre les periodes libres (donc non reservées)
entre le 01/06/04 et le 15/06/04

je fais donc :
select * from SemaineReservee where cpsemainereserve
not in(
select cpsemainereserve from SemaineReservee semaine
where (ddebut>='01/06/04' and dfin<='15/06/01'))

j'ai effectivement des enregistrements "bons" : je ressorts des lignes
DDebut 26/06/04 et Dfin 28/08/04 (effectivement cette periode est libre
entre le 01/06/04 et 15/06/04) mais j'ai egalement des résultats qui ne me
vont pas : Ddebut: 01/06/04 Dfin : 30/09/04.
il me manque des conditions mais comment etre sur de ne pas en louper.
Si quelqu'un a déja eu ce type de problèmes...et a sa solution, je suis
preneur

Merci
Christophe






Avatar
Michel Walsh
Salut,

La condition n'est pas ce quelle devrait, essayer plutôt



where (ddebut<='15/06/04' and dfin>'01/06/01'))


(il se peut que >= soit requis au lieu de >, tout dépend si la date de fin
est incluse ou excluse ).


En effet, le principe de base est:

IL N'Y A PAS de recoupement entre deux intervalles si et seulement si:

ddebut > finDeRéservation OR dfin <= débutDeRéservation

par simple évidence, car le second commence après la fin du premier, ou
termine avant le début du premier. (implicitement, on fait usage des deux
conditions cachées: dfin > ddebut ainsi que finDeRéservation >
débutDeRéservation)


IL Y A recoupement dans la négative de l'énoncé précédant (lois de De
Morgan):

ddebut <= finDeRéservation AND dfin > débutDeRéservation


d'où l'énoncé proposé. Ayant les items "occupés", en tout ou en partie, pour
la période proposée, il s'agit de procéder comme la logique initiale le
propose, soit, ne conserver que les items "NOT IN ( items occupés )".



Espérant être utile,
Vanderghast, Access MVP


"TopBidouille" wrote in message
news:c24o4c$p28$
Re Bonjour,

j'expose mon probleme :
j'ai une table SemaineReservee qui contient des périodes de réservations :
SemaineReservee(IdSemaineReservee,DdebutPeriode,DFinPeriode,...)

je voudrai pouvoir resortir de cette table les lignes qui sont libres


entre
2 dates :
par exemple je voudrai connaitre les periodes libres (donc non reservées)
entre le 01/06/04 et le 15/06/04

je fais donc :
select * from SemaineReservee where cpsemainereserve
not in(
select cpsemainereserve from SemaineReservee semaine
where (ddebut>='01/06/04' and dfin<='15/06/01'))

j'ai effectivement des enregistrements "bons" : je ressorts des lignes
DDebut 26/06/04 et Dfin 28/08/04 (effectivement cette periode est libre
entre le 01/06/04 et 15/06/04) mais j'ai egalement des résultats qui ne me
vont pas : Ddebut: 01/06/04 Dfin : 30/09/04.
il me manque des conditions mais comment etre sur de ne pas en louper.
Si quelqu'un a déja eu ce type de problèmes...et a sa solution, je suis
preneur

Merci
Christophe





Avatar
TopBidouille
Merci,
c'est bon j'ai trouvé (voir mon post précédent - a priori) il fallait que
j'enlève egalement les periode reservées "plus grandes" (exactement ce que
tu m'as proposé) que ce que je cherche, et apres verification sur les
données que j'ai en base (long et fastidieu, mais merci excel) il s'avere
que ca fonctionne...
ouala
Encore merci
Christophe

"Michel Walsh" a écrit dans le message
de news:
Salut,

La condition n'est pas ce quelle devrait, essayer plutôt



where (ddebut<='15/06/04' and dfin>'01/06/01'))


(il se peut que >= soit requis au lieu de >, tout dépend si la date de


fin
est incluse ou excluse ).


En effet, le principe de base est:

IL N'Y A PAS de recoupement entre deux intervalles si et seulement si:

ddebut > finDeRéservation OR dfin < débutDeRéservation

par simple évidence, car le second commence après la fin du premier, ou
termine avant le début du premier. (implicitement, on fait usage des deux
conditions cachées: dfin > ddebut ainsi que finDeRéservation >
débutDeRéservation)


IL Y A recoupement dans la négative de l'énoncé précédant (lois de De
Morgan):

ddebut <= finDeRéservation AND dfin > débutDeRéservation


d'où l'énoncé proposé. Ayant les items "occupés", en tout ou en partie,


pour
la période proposée, il s'agit de procéder comme la logique initiale le
propose, soit, ne conserver que les items "NOT IN ( items occupés )".



Espérant être utile,
Vanderghast, Access MVP


"TopBidouille" wrote in message
news:c24o4c$p28$
> Re Bonjour,
>
> j'expose mon probleme :
> j'ai une table SemaineReservee qui contient des périodes de réservations


:
> SemaineReservee(IdSemaineReservee,DdebutPeriode,DFinPeriode,...)
>
> je voudrai pouvoir resortir de cette table les lignes qui sont libres
entre
> 2 dates :
> par exemple je voudrai connaitre les periodes libres (donc non


reservées)
> entre le 01/06/04 et le 15/06/04
>
> je fais donc :
> select * from SemaineReservee where cpsemainereserve
> not in(
> select cpsemainereserve from SemaineReservee semaine
> where (ddebut>='01/06/04' and dfin<='15/06/01'))
>
> j'ai effectivement des enregistrements "bons" : je ressorts des lignes
> DDebut 26/06/04 et Dfin 28/08/04 (effectivement cette periode est libre
> entre le 01/06/04 et 15/06/04) mais j'ai egalement des résultats qui ne


me
> vont pas : Ddebut: 01/06/04 Dfin : 30/09/04.
> il me manque des conditions mais comment etre sur de ne pas en louper.
> Si quelqu'un a déja eu ce type de problèmes...et a sa solution, je suis
> preneur
>
> Merci
> Christophe
>
>
>