从大角度看,重叠日期时间的T-SQL聚合

时间:2018-06-20 20:11:01

标签: sql sql-server tsql sql-server-2016

任务是:如果您愿意,我有一个类似于考勤卡的应用程序。但是,任何雇员可能有一个或多个与另一个重叠的索赔条目。目前正在VB.NET中进行聚合,但是这种方式存在巨大的性能问题。因此,我的目标是在可能的情况下使用T-SQL为我执行此操作。希望这是有道理的。每个索赔条目都有一个备注字段,如果条目重叠,则应将其合并。因此,它的工作原理如下: 声明1:ClaimID-123开始-“ 9:00”结束-“ 10:00”注释-“测试1” Claim-2:ClaimID-456开始-“ 9:30”结束-“ 10:30”注释-“测试2” 所需结果:开始-“ 9:00”,结束-“ 10:30”,将注释列连接起来,以包括两个索赔条目中的注释。

SQL代码开始

   SELECT s1.StartTime,
   MIN(t1.EndTime) As EndTime
   FROM vw_ClaimLine s1
   INNER JOIN vw_ClaimLine t1 ON s1.StartTime <= t1.EndTime
   AND NOT EXISTS(SELECT * FROM vw_ClaimLine t2
   WHERE t1.EndTime >= t2.StartTime AND t1.EndTime < t2.EndTime)
   WHERE NOT EXISTS(SELECT * FROM vw_ClaimLine s2
   WHERE s1.StartTime > s2.StartTime AND s1.StartTime <= s2.EndTime)
   AND
   s1.RecDate BETWEEN '4-01-2018' AND '4-1-2018' AND s1.ProvidedBy = 233
   GROUP BY s1.StartTime

0 个答案:

没有答案