私は次のようなデータを持っています:
私がする必要があるのは、同じレコードの場合、nullClientId
ではない連続した行を(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
PlaceId
1967は、 nullでない行がないため、結果セットから除外できます。注意すべき他のいくつかのこと:
CpId
これは、として作成された一時テーブルから取得され、IDENTITY
テーブルにはstrictが入力されているORDER BY
ためCpId
、必要な順序で順番に並べられます。- があり、単一の行
PlaceId
が連続している行の場合、は前の行のと同じClientId
である必要があります。DateAdmitted
DateDischarged
できればカーソルなしでこれができるようにしたいと思っていますが、2日間困惑した後、理解できません。これはSQLServer2008R2にあります。