我有一个包含人口统计记录列表的数据库表,其中一些参与者可能有多个/重复的记录,例如
注意:
性别:
119 = 男性
118 = 女性
种族:
255 = 白色
253 = 亚洲人
城乡:
331=城市
332=农村
participantid, gender, race, urbanrural, moduletypeid, hibernateid, and more fields
1, 119, 0, 331, 1, 1, .....
1, 119, 255, 0, 2, 2, .....
1, 0, 255, 331, 3, 3, .....
1, 119, 253, 331, 0, 4, .....
输出应保留第一个 hibernateid,重复的记录将合并到第一个 hibernateid 记录。如果您可以使用将检查记录是否重复的功能来执行此操作,那么在合并记录后它会删除未使用的重复记录。你的回答给了我一个解决这个问题的好主意。谢谢
输出应该是:
participantid, gender, race, urbanrural, moduletypeid, hibernateid, and more fields
1, 119, 255, 331, 1, 1, .....
帮帮我,谢谢
最佳答案
你可以在 Postgres 9.1+ 中做这样的事情:
WITH duplicates AS (
SELECT desired_unique_key, count(*) AS count_of_same_key, min(st.id) AS keep_id, max(st.id) as delete_id
FROM source_table st
GROUP BY desired_unique_key
HAVING count(*) > 1
),
deleted_dupes AS (
DELETE FROM source_table st
WHERE st.id IN (SELECT(delete_id) FROM duplicates)
)
UPDATE source_table st
SET field = WHATEVER
FROM duplicates d
WHERE st.id = d.keep_id
关于sql - 将重复记录合并为1条具有相同表和表字段的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3437966/