Basierend auf Ihren Beispieldaten (die ich in einer Tabelle gesetzt haben als Test bezeichnet wird), und keine Überschneidungen unter der Annahme:
;with Ranges as (
select Code,Start_Date,End_Date,Volume from Test
union all
select r.Code,r.Start_Date,t.End_Date,(r.Volume + t.Volume)
from
Ranges r
inner join
Test t
on
r.Code = t.Code and
DATEDIFF(day,r.End_Date,t.Start_Date) = 1
), ExtendedRanges as (
select Code,MIN(Start_Date) as Start_Date,End_Date,MAX(Volume) as Volume
from Ranges
group by Code,End_Date
)
select Code,Start_Date,MAX(End_Date),MAX(Volume)
from ExtendedRanges
group by Code,Start_Date
Erläuterung:
die Bereiche CTE alle Zeilen aus der ursprünglichen Tabelle enthält (weil einige von ihnen könnten relevant sein) und alle Zeilen wir von joi bilden können Ning Bereiche zusammen (sowohl ursprüngliche Bereiche, und alle Zwischenbereiche, die wir konstruieren - wir machen Rekursion hier).
Dann findet ExtendedRanges (schlecht benannt) für jedes bestimmte End_Date das früheste Start_Date, das es erreichen kann.
Schließlich fragen wir dieses zweite CTE ab, um für jedes bestimmte Startdatum das neueste Enddatum zu finden, das damit verknüpft ist.
Diese beiden Abfragen kombinieren, um den CTE der Bereiche im Grunde nach "dem größtmöglichen Start_Datum/End_Datum-Paar" in jedem Satz überlappender Datumsbereiche zu filtern.
Beispieldatenaufbau:
create table Test (
Code int not null,
Start_Date date not null,
End_Date date not null,
Volume int not null
)
insert into Test(Code, Start_Date, End_Date, Volume)
select 470,'24-Oct-10','30-Oct-10',28 union all
select 470,'17-Oct-10','23-Oct-10',2 union all
select 470,'26-Sep-10','2-Oct-10',2 union all
select 471,'22-Aug-10','29-Aug-10',2 union all
select 471,'15-Aug-10','21-Aug-10',2
go
In Ihrer Beispielausgabe (jetzt, dass es formated dank KM) Ich bin nicht sicher, warum die die Reihe 470 26-Sep-10 2-Oct-10 2 würde nicht mit dem anderen 470 Code verschmolzen werden? –
wird jedes Paar von Zeilen (für einen bestimmten Code) jemals Datumsbereiche haben, die sich tatsächlich überlappen, oder werden sie immer unterschiedlich sein? –