Oracle
根據最大日期從多個記錄中選擇唯一記錄
我有如下表
+----+----------+-----+-------------+--------+ | ID | ADDR | IND | update_Date | Sq_NBR | +----+----------+-----+-------------+--------+ | 1 | PHYSICAL | Y | 11-Oct | 1293 | | 1 | BILL | Y | 10-Oct | 1357 | | 1 | BILL | N | 10-Sep | 13567 | | 1 | PHYSICAL | Y | 10-Oct | 8403 | | 1 | BILL | Y | 6-Oct | 135 | | 2 | PHYSICAL | Y | 9-Oct | 5333 | | 2 | BILL | N | 8-Aug | 657 | | 2 | BILL | Y | 8-Oct | 3673 | | 2 | BILL | Y | 10-Oct | 2574 | | 3 | BILL | Y | 11-Oct | 57923 | | 3 | BILL | Y | 11-Oct | 29384 | +----+----------+-----+-------------+--------+
在填充數據之前需要檢查以下多個條件
- 如果記錄具有重複 id、addr 和 Ind 的組合,則從該記錄中選擇 max(update_date)。
- 如果記錄有重複的id、addr、Ind和update_Date的組合,則從重複記錄中只選擇一條記錄(可以是任何記錄)。
以下是預期的結果。
誰能給我一些想法來實現這一點。
這是 sqlfiddle: http ://sqlfiddle.com/#!4/d0098/1
+----+----------+-----+-------------+--------+ | ID | ADDR | IND | Update_Date | Sq_NBR | +----+----------+-----+-------------+--------+ | 1 | PHYSICAL | Y | 11-Oct | 1293 | | 1 | BILL | Y | 10-Oct | 1357 | | 1 | BILL | N | 10-Sep | 13567 | | 2 | PHYSICAL | Y | 9-Oct | 5333 | | 2 | BILL | N | 8-Aug | 657 | | 2 | BILL | Y | 10-Oct | 2574 | | 3 | BILL | Y | 11-Oct | 29384 | +----+----------+-----+-------------+--------+
下面的查詢給了我想要的結果:
SELECT ID, ADDR, IND, UPDATE_DATE, SQ_NBR FROM ( SELECT ID, ADDR, IND, UPDATE_DATE, SQ_NBR, ROW_NUMBER() OVER (PARTITION BY ID , ADDR , IND ORDER BY UPDATE_DATE DESC) RMN FROM TEST_TABLE ) A WHERE RMN = 1
對於第一個條件
- count() Over(按 id、addr、Ind 分區)
- max(update_date) Over(按 id、addr、Ind 分區)
對於第二個條件
- row_number Over(按 id、addr、Ind 和 update_Date 分區)