我在 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:
表2:
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