sql - 将重复记录合并为1条具有相同表和表字段的记录

标签 sql postgresql function

我有一个包含人口统计记录列表的数据库表,其中一些参与者可能有多个/重复的记录,例如

注意:
性别:
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/

相关文章:

c++ - erase-remove_if 习语 - 有什么东西被删除了吗?

python - 我的 'lowest common multiple' 程序挂起,没有输出答案

c# - 从 SQL 数据库加载纬度和经度到谷歌地图

sql - 如何将数据库列(及其数据)提取到新表中?

c# - Entity Framework 中 .SqlQuery() 方法的 params 参数是什么?

postgresql - 根据时间和日期在 PostgreSQL 中的时态数据库中创建子集

postgresql - Golang lib/pg 无法连接到 postgres

C++ [D3D11] - 奇怪的行为,函数被调用 2 次

mysql - SQL 查询Where IN 条件

sql - 在 SELECT 中包含一个属性而不必在 GROUP BY 中包含它