Perhaps this?
if exists(select 1 from tempdb.sys.objects where object_id = object_id('tempdb..#TempTable'))
DROP TABLE #TempTable;
CREATE TABLE #TempTable(
[Customer] VARCHAR(50) NOT NULL,
[Status] INT NULL,
[CreatedDate] DATETIME NULL,
[LastUpdateDate] DATETIME NULL,
)
INSERT INTO #TempTable
SELECT 'CustA',1,'01/01/2013','01/01/2013'
UNION
SELECT 'CustA',2,'01/01/2013','01/05/2013'
UNION
SELECT 'CustA',1,'01/01/2013','01/20/2013'
UNION
SELECT 'CustA',3,'01/01/2013','02/01/2013'
UNION
SELECT 'CustB',1,'01/01/2013','01/01/2013'
UNION
SELECT 'CustC',2,'01/01/2013','01/05/2013'
UNION
SELECT 'CustB',1,'01/01/2013','01/20/2013'
UNION
SELECT 'CustB',3,'01/01/2013','02/01/2013';
go
with BaseData as (
select
Customer,
Status,
CreatedDate,
LastUpdateDate,
rn = row_number() over (partition by Customer order by LastUpdateDate)
from
#TempTable
)
select
bd1.Customer,
bd1.Status,
NumOfDays = sum(datediff(dd,bd1.LastUpdateDate,isnull(bd2.LastUpdateDate, getdate())))
from
BaseData bd1
left outer join BaseData bd2
on (bd1.Customer = bd2.Customer and
bd1.rn = bd2.rn - 1)
group by
bd1.Customer,
bd1.Status
order by
bd1.Customer,
bd1.Status;
go
if exists(select 1 from tempdb.sys.objects where object_id = object_id('tempdb..#TempTable'))
DROP TABLE #TempTable;
go