私の問題をセットベースで解決するために1 1/2シフトを試みましたが、そこにはかなり到達できませんでした。カーソルで約15分でそれを解決し、それは十分に速く実行されます。 しかし、それはセットベースの方法があるのだろうかと思います。不連続シーケンスの最初のレコードを特定するTSQL
私たちは、第三者のHRアプリケーションから抽出された従業員ステータス変更の記録を持っています:empid、recorddate、status。時間の経過とともにempの状態が変化するたびに記録とステータスを特定する必要があります。しかし、データに問題があります。 empの記録日が異なる行がある場合もありますが、ステータスは変更されません。
declare @test table (empid int, recorddate date,status varchar(10))
insert into @test (empid,recorddate,status) values
(1,'1/1/2000','a'),
(1,'2/1/2000','b'),
(1,'3/1/2000','b'),
(1,'3/3/2000','b'),
(1,'4/1/2000','c'),
(2,'2/1/2000','a'),
(2,'3/1/2000','c'),
(1,'5/1/2000','a')
(1,'6/1/2000','a')
(2,'7/1/2000','c')
empの状態の変更に関する記録とステータスを返す必要があります。
したがって、次の例では、前のレコードの日付が2000年2月1日のものと同じで、empのレコードがないため、emp#1のレコードの日付が3/1/2000のレコードは返されませんステータス値が変更されず、以前の最も近いレコード日付で記録されたため、6/1/2000に対して#1。ステータスが最も近い早くrecordate
empid, recorddate, status
--------------------------------------
1,'1/1/2000','a'
1/'2/1/2000','b'
1,'4/1/2000','c'
1,'5/1/2000','a'
2,'2/1/2000','a'
2,'3/1/2000','c'
のために変化していなかったので、
とEMP#2の同じ概念が、レコードがそのEMPのため2000年7月1日recorddateで返されていない私は、使用してステータスの不変のシーケンス番号付けてみましたempidとステータス別に分割し、empidで注文し、記録し、各ウィンドウの "フレーム"からrownumber 1を選択して、最も早い時期に取得しますが、運はありません。 emwnのレコードで> 1回発生する可能性があるが、レコード間で不連続である場合、rownumberは1にリセットされません。
おかげ 県
私の悪いです。私たちはSQL Server 2008 R2について説明しているはずです – user3389773