【问题标题】:How to replace multiple fields values with values from another table?如何用另一个表中的值替换多个字段值?
【发布时间】:2023-01-19 00:18:46
【问题描述】:

我有两个表:TableAU

Id Status User
1   15    111
2   15    111
3   15    111

TableB 包含上一张表的状态更改历史记录:

Id IdA Status   Date
1   1   10   2023-01-18
2   1   30   2022-12-18
3   3   30   2022-01-17
4   3   10   2022-01-16

我需要做的是使用 TableB 中的值更新 TableA 中 User 111 的每一行的状态字段值,我需要在 TableB 中找到最新的实体更改并将其状态写入 TableA 中的相应实体。

所以 TableA 的最终结果应该是:

Id Status User
1    10   111
2    15   111
3    30   111

【问题讨论】:

  • 你的意思是 15 应该变成 10 对于表 A 中的所有用户 111 行?
  • 这是某种恢复吗? (奇怪的设计和场景。)
  • 不幸的是,这是我现在工作中必须面对的现实,我会尝试重新制作这个概念,但是以前的开发人员是这样制作的,我需要恢复一些数据

标签: sql database postgresql


【解决方案1】:

根据按日期升序排序的 IdA 对表 b 进行排名,然后选择行号 1 来更新表 a。

Row_number()超过(按...排序)

表是第二个表,表是第一个表

update tablen t1 set status = t2.status
from 
(select id, IDA, status from (
select *,
row_number ()over(partition by IDA order by daten desc) rnk
from tableb) x 
  where rnk = 1)t2 where t1.id = t2.idA;

该子句是获取最后更新

select id, IDA, status from (
select *,
row_number ()over(partition by IDA order by daten desc) rnk
from tableb) x 
  where rnk = 1

【讨论】:

    猜你喜欢
    • 2013-10-08
    • 1970-01-01
    • 2021-01-01
    • 2017-05-14
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多