在postgreSQL中根据另一个表中的最高记录值更新一个表

问题描述 投票:0回答:1

我在 postgreSQL 数据库中有两个表(见下文)。 Table1 跟踪对每个 ID 所做的所有更改(即每个 ID 多行),而 Table2 每个 ID 仅包含一行。我需要一个 SQL 查询来根据 Table1 中每个 ID 的最高记录值更新 Table2,并更新所有其他字段(本例中为 Data1、Data2、Data3)。这些表只是示例,但我的实际数据有很多列,因此我想使用某种通配符来包含更新中的所有字段。

postgreSQL 中的 SQL 相对较新,但这是我尝试获取返回的最新记录版本,但不确定如何从那里更新 Table2。我已经进行了几次尝试,但没有任何效果,因此可能不值得发布该代码。

  select * from
    Table1 t1
  where
    (ID,Record) in 
    (
      select
        ID,
        MAX(Record)
      from
        Table1 t1
      group by
        ID
     )

表1:

Table1

表2:

Table2

sql postgresql
1个回答
0
投票
WITH hgh AS (
    SELECT  ID, MAX (Record) AS max_record
    FROM    Table1
    GROUP BY ID
)
UPDATE   Table2 t2
  SET Data1 = t1.Data1,
      Data2 = t1.Data2,
      Data3 = t1.Data3,
      Record = t1.Record
FROM hgh h
   JOIN Table1 t1
       ON (   t1.ID = h.ID
          AND t1.record = h.max_record
          )
WHERE  t2.ID = t1.ID
© www.soinside.com 2019 - 2024. All rights reserved.