我想加入两张 table 。 表1是这样的:
id Date
a 01.01.2021
a 02.01.2021
a 03.01.2021
b 01.01.2021
b 02.01.2021
b 03.01.2021
c 01.01.2021
c 02.01.2021
c 03.01.2021
表2是这样的:
id value
a 12
a 8
b 50
作为最终结果,我想要一个像这样的表格: 对于表2中的现有id,相同id的值的总和应存储在表1中的最后一个日期中。
id Date Value_FINAL
a 01.01.2021 0
a 02.01.2021 0
a 03.01.2021 20
b 01.01.2021 0
b 02.01.2021 0
b 03.01.2021 50
c 01.01.2021 0
c 02.01.2021 0
c 03.01.2021 0
我一开始尝试使用左连接来连接这两个表,
with t3 as ( select id, sum(value) Value_FINAL from t2 group by id)
select t1.*, t3.value_FINAL from t1 left join t3 on t1.id = t3.id;
在此之后,我可以得到这个:
id Date Value_FINAL
a 01.01.2021 20
a 02.01.2021 20
a 03.01.2021 20
b 01.01.2021 50
b 02.01.2021 50
b 03.01.2021 50
c 01.01.2021 0
c 02.01.2021 0
c 03.01.2021 0
但是,这不是我想要的。有人可以帮忙吗?如何仅保留“value_FINAL”列中最后一个日期的值
我还在考虑使用 last_value(value) 而不是 (partition by id order by date)
。但我需要创建一个额外的表或列。
也许有人有一个好主意如何处理这个问题?
最佳答案
基于join
的替代方案
select a.*, coalesce(c.value,0)
from t1 a
left join (select id, max(date) date from t1 group by id) b on a.id = b.id and a.date = b.date
left join (select id, sum(value) value from t2 group by id) c on b.id = c.id
关于SQL,左连接表,如何只保留一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67024105/