使用分区的Oracle更新查询

时间:2017-07-05 04:09:05

标签: sql oracle window-functions

我在Oracle v.12数据库中有以下示例数据

ID | NAME   | DML_TYPE  | FND_FILESEQNO | FND_FILERBA

---------------------------------------------------------

1  | name1a | insert    | 1             | 1

1  | name1b | update    | 1             | 2

2  | name2a | insert    | 2             | 1

2  | name2b | update    | 2             | 2

....

....

....

我想要跟随2笔交易

  1. delete old records (FND_FILESEQNO + FND_FILERBA) partition by 'ID' column

  2. update latest record DML_TYPE = 'insert'

  3. 所以最终,如果我查询这个表,我应该得到以下结果......

    ID | NAME   | DML_TYPE  | FND_FILESEQNO | FND_FILERBA
    
    ---------------------------------------------------------
    
    1  | name1b | insert    | 1             | 2
    
    2  | name2b | insert    | 2             | 2
    

    非常感谢

1 个答案:

答案 0 :(得分:0)

试试这个: -

MERGE INTO STACTOVER a
USING (  SELECT * FROM (
      SELECT   STACTOVER.*,Row_Number() OVER(PARTITION BY ID ORDER BY ID)rn 
FROM  STACTOVER)WHERE rn>1
  )b 
ON
(a.ID = b.ID)
WHEN MATCHED THEN
  UPDATE SET a.dml_type = 'insert'
  DELETE WHERE a.NAME != b.NAME ;