sql - 如何仅基于 ROW_NUMBER() 更新行?

标签 sql oracle oracle11g

这样的SQL查询:

SELECT ROW_NUMBER() OVER (PARTITION BY ID, YEAR order by ID ), ID, YEAR
from table t

给我以下查询集:

1   1000415591  2012
1   1000415591  2013
2   1000415591  2013
1   1000415591  2014
2   1000415591  2014

如何更新 ROW_NUMBER() 等于 2 的记录?该记录的其他字段是相同的(selectdistinct from table where id = 1000415591 给出 3 条记录,当有 5 条没有 distinct 关键字时),所以我只能依赖 ROW_NUMBER( )值。

我需要 Oracle 的解决方案,因为我看到了 SQL-Server 的类似解决方案,但它不适用于 Oracle。

最佳答案

您可以使用非常冗长且易于理解的 MERGE 语句。

例如,

MERGE INTO t s 
USING
(SELECT ROW_NUMBER() OVER (PARTITION BY ID, YEAR order by ID ) RN,
  ID,
  YEAR
FROM TABLE t
) u ON (s.id = u.id)
WHEN MATCHED THEN
  UPDATE SET YEAR = some_value WHERE u.RN = 2)
/

注意您不能合并用于连接 ON 子句的同一列。

关于sql - 如何仅基于 ROW_NUMBER() 更新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30454010/

相关文章:

sql - 调整日期以匹配保存的星期几

sql - 如何实现自定义评级系统(日期相关性下降)

oracle - 如果连接丢失,从 SQL Server 到 Oracle 服务器的 OpenQuery 将无限期挂起

sql - 为什么 Oracle DROP USER CASCADE 不从磁盘中删除用户的所有残余?

sql - 使用参数创建 SQL View

sql - 如何在 postgres 查询中按正则表达式分组

sql - 仅当目标表不为空时才更新目标表

java - 在 Oracle PL/SQL 中调用存储过程

oracle - 如何将数据从 PL/SQL 包导入 SPSS?

python - 如何使用python pypyodbc连接oracle数据库