additionner le nombre de jours dans de nombreux intervalles

J'ai le tableau suivant:

CREATE table DataDiff (CLI tinyint, id tinyint, date datetime, countable bit) insert into DataDiff values (234,1,convert(datetime,'17/12/1997',103),1) insert into DataDiff values (234,2,convert(datetime,'09/07/1998',103),0) insert into DataDiff values (234,3,convert(datetime,'11/08/1998',103),1) insert into DataDiff values (234,4,convert(datetime,'29/12/1998',103),0) insert into DataDiff values (234,5,convert(datetime,'01/02/1999',103),1) insert into DataDiff values (234,6,convert(datetime,'03/02/1999',103),0) insert into DataDiff values (234,7,convert(datetime,'03/02/1999',103),1) insert into DataDiff values (234,8,convert(datetime,'29/03/1999',103),0) insert into DataDiff values (234,9,convert(datetime,'29/03/1999',103),1) insert into DataDiff values (234,10,convert(datetime,'31/03/1999',103),0) 

J'ai du mal à réécrire, sans RBAR, un UDF pour countr les jours de ID = 1 jusqu'à ID = 2 puis de ID = 3 à ID = 4 et ainsi de suite, commençant toujours le count quand COUNTABLE = 1 et s'arrêtant quand COUNTABLE = 0, puis renvoie la sum pour une CLI donnée.

La longueur en jours des cinq intervalles représentés est:

 ID=2 - ID=1 = 204 ID=4 - ID=3 = 140 ID=6 - ID=5 = 2 ID=8 - ID=7 = 54 ID=10 -ID=9 = 2 

pour un total de 402 jours "dénombrables" sur un total de 469 jours entre ID = 1 et ID = 10

Essayer:

 select t1.cli , sum(t1.countable * datediff(day, t1.[DATE], coalesce(t2.[DATE],getdate())) ) daycount from DataDiff t1 left join DataDiff t2 on t1.cli = t2.cli and t1.id+1 = t2.id group by t1.cli 

(En supposant que si la dernière date d'logging de la cli est dénombrable, elle doit être comptée jusqu'à la date actuelle.)