給定一個包含員工狀態和生效日期的表格,如何才能檢索僅反映狀態變化的數據?查詢以反映數據中的實際重大變化
例如,給定的結構如下:
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
換句話說,我要離開了那些具有相同的員工ID和狀態代碼作爲其前一個,如果與之前的生效日期存在的記錄。請注意,員工1僅列出兩次,因爲狀態只有兩次實際更改 - 2012-02-28的狀態變化無關緊要,因爲狀態未從早期日期更改。另請注意,員工2僅列出一次,因爲儘管有三條記錄,他的狀態從未改變。只顯示每個更改的最早日期。
或者,你可以在'ON'子句中添加'AND t2.STATUS_CODE = t1.STATUS_CODE',並將'WHERE'子句修改爲'WHERE t1.EMPLOYEE_ID IS NULL'。 – 2012-03-21 13:53:00
@AndriyM好點,我喜歡更好的方式,謝謝。更新。 – JustinStolle 2012-03-21 16:23:39