SQL,左连接表,如何只保留一个值?

标签 sql left-join

我想加入两张 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/

相关文章:

mysql - 比较大文本字段是否相等

mysql - 选择一个记录,除了一个

mysql - Sql 查询查找给定表的子集

c# - 如何动态检查if语句

带有用于多行插入的循环的 SQL Server 触发器

mysql - 优化左连接

c# - 左外连接并存在于 Linq To SQL C# .NET 3.5 中

php - 当我的一个表对于通用 ID 为空时,我应使用哪个联接进行更新?

mysql - 当我得到其他返回行的 null = 0 值时,如何显示其他查询行

php - 带有尺寸表的 MySQL 购物项目表