-1
Я хотел бы получить следующий результат на изображении. Свертывание непрерывных диапазонов в отдельные строки в MSSQL. Пример кода ниже, я почти получил его, чтобы работать, хотя я думаю, что это довольно новобранец. Я думаю, что я должен использовать лидерство/отставание и разбиение, но не уверен, как заставить его работать.MSSQL TSQL Challenging Continuous Timeline Grouping
Пример Результат
Пример таблицы данных ....
DROP Table #t2
SELECT
[Duration (hours)]
,CAST(LTRIM(RTRIM([Event Start])) AS DATETIME) AS [Start_Date]
,CAST(LTRIM(RTRIM([Event Finsh])) AS DATETIME) AS [End_Date]
,[Date of Record]
,[Equipment] AS EQ
,[Down Category]
,[Failure Mode] AS FM
,[Equipment] + ' - ' + [Failure Mode] AS id
INTO #t2
FROM
(
SELECT 19.92472222 AS [Duration (hours)], '17-Jul-2016 10:04:31' AS [Event Start],'18-Jul-2016 06:00:00' AS [Event Finsh],'2016-07-17 ' AS [Date of Record],'CART43 ' AS [Equipment],'Breakdown ' AS [Down Category],'NO LABOUR ' AS [Failure Mode]
UNION ALL SELECT 12, '18-Jul-2016 06:00:00 ','18-Jul-2016 18:00:00 ','2016-07-18 ','CART43 ','Breakdown ','NO LABOUR '
UNION ALL SELECT 12, '18-Jul-2016 18:00:00 ','19-Jul-2016 06:00:00 ','2016-07-18 ','CART43 ','Breakdown ','NO PARTS AVAILABLE '
UNION ALL SELECT 12, '19-Jul-2016 06:00:00 ','19-Jul-2016 18:00:00 ','2016-07-19 ','CART43 ','Breakdown ','NO LABOUR '
UNION ALL SELECT 12, '19-Jul-2016 18:00:00 ','20-Jul-2016 06:00:00 ','2016-07-19 ','CART43 ','Breakdown ','NO PARTS AVAILABLE '
UNION ALL SELECT 24, '20-Jul-2016 06:00:00 ','21-Jul-2016 06:00:00 ','2016-07-20 ','CART43 ','Breakdown ','NO PARTS AVAILABLE '
UNION ALL SELECT 0.200277778, '21-Jul-2016 06:00:00 ','21-Jul-2016 06:12:01 ','2016-07-21 ','CART43 ','Breakdown ','NO PARTS AVAILABLE '
UNION ALL SELECT 18.70138889, '18-Jul-2016 11:17:55 ','19-Jul-2016 06:00:00 ','2016-07-18 ','CART1 ','Planned Down ','SCHEDULED DOWN '
UNION ALL SELECT 1.305277778, '19-Jul-2016 06:00:00 ','19-Jul-2016 07:18:19 ','2016-07-19 ','CART1 ','Planned Down ','SCHEDULED DOWN '
UNION ALL SELECT 4.195, '19-Jul-2016 07:18:19 ','19-Jul-2016 11:30:01 ','2016-07-19 ','CART1 ','Breakdown Other ','SCHEDULED DOWN OVERRUN '
UNION ALL SELECT 0.200555556, '20-Jul-2016 11:53:12 ','20-Jul-2016 12:05:14 ','2016-07-20 ','CART1 ','Breakdown ','WHEEL '
UNION ALL SELECT 2.542777778, '20-Jul-2016 12:21:15 ','20-Jul-2016 14:53:49 ','2016-07-20 ','CART1 ','Breakdown ','CONTROL '
UNION ALL SELECT 3.985, '20-Jul-2016 18:43:49 ','20-Jul-2016 22:42:55 ','2016-07-20 ','CART1 ','Breakdown ','HYDRAULICS '
UNION ALL SELECT 4.694722222, '21-Jul-2016 01:18:19 ','21-Jul-2016 06:00:00 ','2016-07-20 ','CART1 ','Breakdown ','MEASURE '
UNION ALL SELECT 0.200277778, '21-Jul-2016 06:00:00 ','21-Jul-2016 06:12:01 ','2016-07-21 ','CART1 ','Breakdown ','MEASURE '
) TB
SELECT [Eq], [FM], MIN([Start_Date]) AS [Event Start], MAX(EF2) AS [Event Finish]
FROM
(
SELECT [T1].[Eq]
, [T1].[FM]
, [T1].[Start_Date]
, [T1].[End_Date]
, ISNULL([T2].[End_Date],[T1].[End_Date]) AS [EF2]
FROM #t2 [T1]
LEFT JOIN #t2 [T2] ON
[T1].[Eq]=[T2].[Eq]
AND [T1].[FM] = [T2].[FM]
AND [T1].[End_Date]=[T2].[Start_Date]
) AS TB
GROUP BY [Eq], [FM], [EF2]
ORDER BY [Eq], MIN([Start_Date])
Похоже, что [Интервалы упаковки] (http://blogs.solidq.com/en/sqlserver/packing-intervals/) для меня. –