J'ai une situation où j'ai besoin de trouver des intervalles de temps entre les changements de valeur. J'ai essayé une simple clause group by, mais elle élimine les changements qui se chevauchent. Prenons l'exemple suivant:Comment éviter le chevauchement des plages de dates lors de l'utilisation d'une clause de regroupement?
create table #items (
code varchar(4)
, class varchar(4)
, txdate datetime
)
insert into #items (code, class, txdate) values ('A', 'C', '2010-01-01');
insert into #items (code, class, txdate) values ('A', 'C', '2010-01-02');
insert into #items (code, class, txdate) values ('A', 'C', '2010-01-03');
insert into #items (code, class, txdate) values ('A', 'D', '2010-01-04');
insert into #items (code, class, txdate) values ('A', 'D', '2010-01-05');
insert into #items (code, class, txdate) values ('A', 'C', '2010-01-06');
insert into #items (code, class, txdate) values ('A', 'C', '2010-01-07');
insert into #items (code, class, txdate) values ('A', 'D', '2010-01-08');
insert into #items (code, class, txdate) values ('A', 'D', '2010-01-09');
select code
, class
, min(txdate) mindate
, max(txdate) maxdate
from #items
group by code, class
Cela renvoie les résultats suivants (remarquez les plages de dates qui se chevauchent):
|code|class|mindate |maxdate |
----------------------------------
|A |C |2010-01-01|2010-01-07|
|A |D |2010-01-04|2010-01-09|
Je voudrais avoir la requête renvoie les éléments suivants:
|code|class|mindate |maxdate |
----------------------------------
|A |C |2010-01-01|2010-01-03|
|A |D |2010-01-04|2010-01-05|
|A |C |2010-01-06|2010-01-07|
|A |D |2010-01-08|2010-01-09|
Des idées et des suggestions?
Vos dates d'entrée ont toutes le mois de janvier pour le mois, mais certains de vos résultats ont avril. Avez-vous transposé des mois et des jours dans vos résultats en les mettant ici? – CanSpice
@CanSpice: Mes dates utilisent le format aaaa-mm-jj. J'ai attrapé l'erreur et l'ai corrigée. Thx –
Bon, alors votre exemple doit inclure les dates en avril, car tout ce que vous entrez est des dates en janvier, mais votre exemple renvoie des dates en avril. – CanSpice