【问题标题】:Oracle update query using partition使用分区的 Oracle 更新查询
【发布时间】:2017-07-05 04:09:05
【问题描述】:

我在 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'

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

ID | NAME   | DML_TYPE  | FND_FILESEQNO | FND_FILERBA

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

1  | name1b | insert    | 1             | 2

2  | name2b | insert    | 2             | 2

非常感谢

【问题讨论】:

  • 那么您是否想要一个程序同时执行这两项操作,或者您可以有两个单独的查询:第一个执行删除,第二个执行更新?

标签: sql oracle window-functions


【解决方案1】:

试试这个:-

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 ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 2021-12-04
    相关资源
    最近更新 更多