Postgres - 查找重复并将其中一行更新为零

Posted

技术标签:

【中文标题】Postgres - 查找重复并将其中一行更新为零【英文标题】:Postgres - Find duplicate and update one of the row to zero 【发布时间】:2018-11-08 23:47:35 【问题描述】:

需要你的帮助,下面是我在 Postgres 中的表结构

Eid     Teamid  Working Days
1000067 166570  21
1000075 163138  21
1000086 163077  21
1000086 185102  21

记录 1000086 有两个团队,我必须将其中一个团队更新为 0 天。当这显示在 UI 中时,经理可以更新,但请您帮我提供一个更好的解决方案吗?

我正在尝试不同的查询,但发现它很棘手。

【问题讨论】:

您能发布一些您尝试过的查询吗? SELECT distinct a.employee_id , a.oracle_sub_team_code ,a.total_days FROM resourcetracker_totaldays a JOIN (SELECT employee_id, COUNT() FROM resourcetracker_totaldays GROUP BY employee_id HAVING count() > 1 ) b ON a.employee_id = b.employee_id where month_value = 'NOVEMBER' order by a.employee_id 我正在使用它来查找记录列表,但我无法将属于两个团队的行之一更新为 0 【参考方案1】:

我认为这个解决方案有效,

更新 resourcetracker_totaldays 设置 total_days = 0 其中 id = 从中选择 id (SELECT id ,employee_id, total_days, oracle_sub_team_code, ROW_NUMBER() OVER (PARTITION BY employee_id) AS 排名 FROM resourcetracker_totaldays 其中 month_value = 'NOVEMBER' ) al 其中排名 > 1

我正在找到该表中该记录的第 2 次、第 3 次出现的排名,我正在获取排名 > 1 的记录并将所有这些 total_days 值更新为 0,这将包含表中的所有记录,但将只有一个团队有 total_days。

【讨论】:

以上是关于Postgres - 查找重复并将其中一行更新为零的主要内容,如果未能解决你的问题,请参考以下文章

使用 Activerecord、Rails 和 Postgres 查找具有多个重复字段的行

使用 jOOQ UPserting 到 Postgres 表时返回更新的行数

简单的更新集 postgres 存储过程

在 Node.js 中为 postgres 表中的每一行以不同的间隔为每一行运行重复任务

如何在javascript中查找重复值并将重复值存储到新数组中

Postgres - 冲突 - 如何知道是不是发生了更新而不是插入 [重复]