我有下表:
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
我该怎么做?
答案 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")