我正在建立查询以建立连续的日期,这是>
create table #consecutivedates ( sgid nvarchar(max), metric nvarchar(max), targetvalue nvarchar(max), startdate datetime, enddate datetime ) insert into #consecutivedates values ('2177', '515818', '18', '2019-09-01', '2019-09-30'), ('2177', '515818', '125', '2019-08-01', '2019-08-31'), ('2177', '515818', '15', '2019-07-01', '2019-07-31') SELECT sgid,metric, CAST(startdate AS DATE) startdate, CAST(enddate AS DATE) enddate, ROW_NUMBER() OVER ( ORDER BY sgid, metric, startdate ) rn INTO #temp FROM #consecutivedates -- GroupingColumn in cte used to identify and group consecutive dates ;WITH cte AS ( SELECT sgid , metric , startdate , enddate , 1 AS GroupingColumn , rn FROM #temp WHERE rn = 1 UNION ALL SELECT t2.sgid , t2.metric, t2.startdate, t2.enddate , CASE WHEN t2.startdate = DATEADD(day, 1, cte.enddate) AND cte.sgid = t2.sgid AND cte.metric=t2.metric THEN cte.GroupingColumn ELSE cte.GroupingColumn + 1 END AS GroupingColumn , t2.rn FROM #temp t2 INNER JOIN cte ON t2.rn = cte.rn + 1 ) SELECT sgid,metric, MIN(startdate) AS startdate, MAX(enddate) AS enddate FROM cte GROUP BY sgid,metric, GroupingColumn DROP TABLE #temp DROP TABLE #consecutivedates
但是我面临两件事的问题。
[当文件很大时查询太昂贵。
如果日期类似于
开始日期结束日期'2019-08-01''2019-09-30''2019-10-01''2019-10-31'
然后查询将不对日期进行分组,我需要它足够聪明以解决这种情况。
任何帮助都会很好,
谢谢。
我正在构建一个查询以构建连续的日期,这是创建表#consecutivedates(sgid nvarchar(max),metric nvarchar(max),targetvalue nvarchar(max),startdate ...
sgid
和metric
相同且相邻的记录归为一组(即,下一条记录从当前记录结束后的第二天开始)。