Doh! i was using getDate()
in my Grp Identifier instead of the [Date] column!
Revised as follows - works fine & handles breaks:
WITH ExampleData ( [DET_NUMBERA], [Date], [Duration] )
AS (
SELECT '0000001' AS [DET_NUMBERA], CONVERT(DATE, '12/11/2012', 103) AS [Date], 9.00 AS [Duration]
UNION ALL
SELECT '0000001', CONVERT(DATE, '13/11/2012', 103), 9.00
UNION ALL
SELECT '0000001', CONVERT(DATE, '14/11/2012', 103), 9.00
UNION ALL
SELECT '0000001', CONVERT(DATE, '16/11/2012', 103), 9.00
UNION ALL
SELECT '0000001', CONVERT(DATE, '17/11/2012', 103), 9.00
UNION ALL
SELECT '0000002', CONVERT(DATE, '04/11/2012', 103), 9.00
UNION ALL
SELECT '0000002', CONVERT(DATE, '05/11/2012', 103), 9.00
UNION ALL
SELECT '0000002', CONVERT(DATE, '06/11/2012', 103), 9.00
UNION ALL
SELECT '0000003', CONVERT(DATE, '01/11/2012', 103), 9.00
UNION ALL
SELECT '0000004', CONVERT(DATE, '02/11/2012', 103), 6.5
),
CrossTabPrep
AS ( SELECT [DET_NUMBERA] ,
[Date] ,
[Duration] ,
CONVERT(INT, CONVERT(VARCHAR(10), [Date], 112)) - ROW_NUMBER() OVER ( PARTITION BY [DET_NUMBERA] ORDER BY [Date] ) AS [Grp]
FROM ExampleData
),
FinalRender ( [DET_NUMBERA], [Start Date], [End Date], [Days], [Duration] )
AS ( SELECT [DET_NUMBERA] ,
MIN([Date]) AS [Start Date] ,
MAX([Date]) AS [End Date] ,
ISNULL(DATEDIFF(DAY, MIN([Date]), MAX([Date])), 0) + 1 AS [Days] ,
SUM([Duration]) AS [Duration]
FROM CrossTabPrep
GROUP BY [DET_NUMBERA] ,
[Grp]
)
SELECT *
FROM FinalRender
ORDER BY [DET_NUMBERA]