【发布时间】:2014-06-02 17:16:00
【问题描述】:
目标:确定表中每个成员的不同连续治疗事件。每个成员都有一个诊断和一个服务日期,一个情节被定义为每个连续服务之间的时间小于某个数字的所有服务(假设本示例为 90 天)。查询将需要遍历每一行并计算日期之间的差异,并返回与每一集关联的第一个和最后一个日期。目标是按成员和剧集开始/结束日期对结果进行分组。
A very similar question 之前有人问过,而且有点帮助。问题是在自定义代码时,返回的表不包括第一条和最后一条记录。我不确定如何继续。
我的数据目前如下所示:
MemberCode Diagnosis ServiceDate
1001 ----- ABC ----- 2010-02-04
1001 ----- ABC ----- 2010-03-20
1001 ----- ABC ----- 2010-04-18
1001 ----- ABC ----- 2010-05-22
1001 ----- ABC ----- 2010-09-26
1001 ----- ABC ----- 2010-10-11
1001 ----- ABC ----- 2010-10-19
2002 ----- XYZ ----- 2010-07-10
2002 ----- XYZ ----- 2010-07-21
2002 ----- XYZ ----- 2010-11-08
2002 ----- ABC ----- 2010-06-03
2002 ----- ABC ----- 2010-08-13
以上数据中,Member 1001的第一条记录是2010-02-04,到2010-09-之前连续服务的时间相差不超过90天26(新剧集开始的日期)。所以会员 1001 有两个不同的情节:(1)诊断 ABC,从 2010-02-04 到 2010-05-22,以及(2)诊断 ABC,从 2010-09-26 到 2010-10-19。
同样,Member 2002 有三个不同的情节:(1) 诊断 XYZ,从 2010-07-10 到 2010-07-21,(2)诊断 XYZ,从 2010-11-08 开始和结束,以及 (3) 诊断 ABC,从 2010-06-03 到 2010-08 -13.
期望的输出:
MemberCode Diagnosis EpisodeStartDate EpisodeEndDate
1001 ----- ABC ----- 2010-02-04 ----- 2010-05-22
1001 ----- ABC ----- 2010-09-26 ----- 2010-10-19
2002 ----- XYZ ----- 2010-07-10 ----- 2010-07-21
2002 ----- XYZ ----- 2010-11-08 ----- 2010-11-08
2002 ----- ABC ----- 2010-06-03 ----- 2010-08-13
我处理这个查询已经太久了,但仍然无法得到我真正需要的东西。任何帮助,将不胜感激。提前致谢!
【问题讨论】:
-
你在 VA 工作吗?不过,说真的,我正在看。看看我能不能帮忙……
-
您使用的是什么版本的 SQL Server?
-
我使用的是 SQL Server 2012。
标签: sql sql-server tsql sequence gaps-and-islands