我的数据如下所示:
我需要做的是,对于具有相同的记录ClientId
,我需要对不为空的连续行(使用 CpId)进行分组PlaceId
,并在每个组中找到第一行和最后一行,以便我可以DateAdmitted
从第一行中检索值和最后一行的DateDischarged
值。所以,上面的数据需要像这样组织,然后过滤出我需要的值:
使用上面的例子,我想要以下基于ClientId
:
ClientId FirstCpIdInSet DateAdmitted LastCpIdInSet DateDischarged
-----------------------------------------------------------------------------
1967 NULL NULL NULL NULL
1983 45 1986-12-29 45 1987-10-09
1983 47 1990-10-01 49 2009-04-12
1983 52 2009-08-31 52 2009-11-30
1988 62 1997-12-15 65 2000-01-07
ClientId
1967 可以从结果集中排除,因为它从来没有PlaceId
不为空的行。还有几点需要注意:
- 这是从使用
CpId
as 创建的临时表中获取的IDENTITY
,并且该表使用 strict 填充ORDER BY
,因此CpId
按所需顺序是连续的。 PlaceId
对于具有单个 且连续的那些行,ClientId
应该DateAdmitted
等于DateDischarged
前一行中的 。
如果可能的话,我真的很希望能够在没有光标的情况下做到这一点,但是在困惑了两天之后,我就是想不通。这是在 SQL Server 2008 R2 上。