従業員ステータスと有効日のテーブルがある場合、のステータスを反映するデータだけをで取得できますか?データの実際の重要な変更を反映するクエリ
は、例えば、以下の構造を与えられた:
DECLARE @STATUSES TABLE(
EMPLOYEE_ID INT NOT NULL,
EFFECTIVE_DATE DATE NOT NULL,
STATUS_CODE CHAR(1) NOT NULL
)
INSERT @STATUSES VALUES (1, '2012-01-01', 'A')
INSERT @STATUSES VALUES (1, '2012-02-28', 'A')
INSERT @STATUSES VALUES (1, '2012-03-01', 'T')
INSERT @STATUSES VALUES (2, '2012-01-01', 'A')
INSERT @STATUSES VALUES (2, '2012-02-14', 'A')
INSERT @STATUSES VALUES (2, '2012-03-10', 'A')
INSERT @STATUSES VALUES (3, '2012-02-01', 'A')
INSERT @STATUSES VALUES (3, '2012-03-17', 'A')
INSERT @STATUSES VALUES (3, '2012-03-18', 'T')
INSERT @STATUSES VALUES (3, '2012-04-01', 'A')
INSERT @STATUSES VALUES (4, '2012-03-01', 'A')
何問合せは、下記をもたらすために使用することができますか?言い換えれば
EMPLOYEE_ID EFFECTIVE_DATE STATUS_CODE
1 2012-01-01 A
1 2012-03-01 T
2 2012-01-01 A
3 2012-02-01 A
3 2012-03-18 T
3 2012-04-01 A
4 2012-03-01 A
、私は1つが、以前の有効日付で存在する場合、その前のものと同じ従業員IDとステータスコードを持って、それらのレコードを残したいです。ステータスが実際に変更されたのは2つだけだったので、従業員1は2回のみ表示されています。ステータスは以前の日付から変更されていないため、2012-02-28のステータスは重要ではありません。また、従業員2は、3つのレコードがあるにもかかわらず、ステータスが変更されていないので、ただ1回リストされています。各変更に対して最も早い日付のみが表示されます。
また、 'ON'節に' AND t2.STATUS_CODE = t1.STATUS_CODE'を追加し、 'WHERE t1.EMPLOYEE_ID IS NULL'のようなものに' WHERE'節を変更することもできます。 –
@AndriyM良い点、私は良い、おかげで読む方法が好きです。更新しました。 – JustinStolle