pl / sql查询删除重复项并替换数据

时间:2014-10-16 15:53:41

标签: sql oracle

我有下表:

data_id  new_data_id  first_name    last_name

  1                        john        smith
  2                        john        smith
  3                        john        smith
  4                        jeff        louis
  5                        jeff        louis
  6                        jeff        louis

上表中包含重复的名字和姓氏,并且data_id对于所有这些名称都不同。为了删除这些重复项,我需要编写一个SQL查询来替换new_data_id列中的最高data_id。我的输出看起来像这样:

data_id  new_data_id  first_name    last_name

  1           3            john        smith
  2           3            john        smith
  3           3            john        smith
  4           6            jeff        louis
  5           6            jeff        louis
  6           6            jeff        louis

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您正在寻找的是Oracle 分析功能

汇总函数MAX可用于从整个结果集中选择最高的data_id,但这并不完全符合您的需求。相反,使用它的另一个自我,MAX分析函数,如:

SELECT
  data_id,
  MAX(data_id) OVER (PARTITION BY first_name, last_name) AS new_data_id,
  first_name,
  last_name
FROM employees
ORDER BY data_id

这适用于"分区"您的结果集由first_name和last_name组成,然后它在该子集中执行给定的函数。

祝你好运!

这是一个小提琴:http://sqlfiddle.com/#!4/48b29/4

更多信息可以在这里找到: http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions004.htm#SQLRF06174

答案 1 :(得分:0)

如果您需要更改 ,相关更新可能是最简单的写入方式:

UPDATE T
SET "new_data_id" =
     (SELECT MAX("data_id") FROM T T2 
        WHERE T2."first_name" = T."first_name" 
          AND T2."last_name" = T."last_name")

请参阅http://sqlfiddle.com/#!4/51a69/1