我在 postgreSQL 数据库中有两个表(见下文)。
Table1
跟踪对每个 ID 所做的所有更改(即每个 ID 多行):
create table table1(id,record,name,data1,data2,data3)as values
(1,1,'Dave', 1.2,55,1)
,(1,2,'David', 1.2,55,1)
,(2,1,'Sam', .8,30,2)
,(3,1,'Jenn', .9,28,2)
,(4,1,'Arthur',1.1,77,1)
,(5,1,'Jim', .7,42,2)
,(5,2,'Jimmy', .7,42,2)
,(5,3,'James', .7,42,2)
,(6,1,'Sue', 1.3,32,2)
,(6,2,'Susan', 1.3,32,2);
Table2
每个 ID 仅包含一行:
create table table2(id,record,name,data1,data2,data3)as values
(1,1,'Dave', 1.2,55,1)
,(2,1,'Sam', .8,30,2)
,(3,1,'Jenn', .9,28,2)
,(4,1,'Arthur',1.1,77,1)
,(5,2,'Jimmy', .7,42,2)
,(6,1,'Sue', 1.3,32,2);
我需要一个 SQL 查询来Table2
根据每个 ID 的最高记录值进行更新Table1
,同时更新所有其他字段(本例中为 、 、 )。data1
这些data2
表
只是示例,但我的实际数据有很多列,所以我想使用某种通配符将所有字段包含在更新中。data3
我对 postgreSQL 中的 SQL 比较陌生,但这是我尝试获取返回的最新记录版本,但不确定如何从那里更新 Table2。我尝试过几次,但都没有成功,所以可能不值得发布该代码。
select * from
Table1 t1
where
(ID,Record) in
(
select
ID,
MAX(Record)
from
Table1 t1
group by
ID
)
预期结果:
ID | 记录 | 姓名 | 数据1 | 数据2 | 数据3 |
---|---|---|---|---|---|
1 | 2 | 大卫 | 1.2 | 55 | 1 |
2 | 1 | 山姆 | 0.8 | 三十 | 2 |
3 | 1 | 詹 | 0.9 | 二十八 | 2 |
4 | 1 | 亚瑟 | 1.1 | 77 | 1 |
5 | 3 | 詹姆斯 | 0.7 | 四十二 | 2 |
6 | 2 | 苏珊 | 1.3 | 三十二 | 2 |