如何通过从一个SQL表中提取最大值然后再将最大值提取到另一个SQL表中来连接两个SQL表?

如何通过从一个SQL表中提取最大值然后再将最大值提取到另一个SQL表中来连接两个SQL表?,sql,logic,Sql,Logic,正如其他人所评论的,我现在要添加一些代码: 导入的表 表3 表2 现在,我想加入表格。结果示例如下: 将每个日期的最大累计值加入到新表中。因此,尽管2020年1月26日的表3显示了从6、7到8的增长,但我只想要最高的累积数字 感谢您让我知道如何改进我以前的查询。你的意见对我帮助很大 我尝试了Gordon Linoff的方法,用实际的名字来代替(我最初省略了这个名字,因为我认为它们模棱两可) 他的代码如下(我投了更高的票): 但我犯了个错误 Error Code: 1055. Expre

正如其他人所评论的,我现在要添加一些代码:

导入的表

  • 表3

  • 表2

  • 现在,我想加入表格。结果示例如下:

    将每个日期的最大累计值加入到新表中。因此,尽管2020年1月26日的表3显示了从6、7到8的增长,但我只想要最高的累积数字

    感谢您让我知道如何改进我以前的查询。你的意见对我帮助很大

    我尝试了Gordon Linoff的方法,用实际的名字来代替(我最初省略了这个名字,因为我认为它们模棱两可)

    他的代码如下(我投了更高的票):

    但我犯了个错误

    Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'new.t3.Report date' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
    

    不管怎样,我现在正在试验。两个答案都有帮助。如果您知道如何修复1055,请告诉我,或者您是否可以提出其他解决方案。谢谢

    我不明白为什么表1上有cumulA和cumulB。我想应该是每天存储最大累积量和累积量

    SELECT * FROM `t1` LEFT JOIN t2 ON t1.date = t2.date ORDER BY t1.date
    
    您必须首先自联接表2,才能找到每个日期的最大值(按日期分组):

    之后,您加入了左表1上的自加入结果表2,每天都有

    SELECT * FROM `t1` LEFT JOIN t2 ON t1.date = t2.date ORDER BY t1.date
    
    以下是两个连接点的融合:

    SELECT * FROM `t1` LEFT JOIN (
    
      SELECT t2.id, t2.date, cA
      FROM t2
          JOIN (
              SELECT id, MAX(cumulA) AS cA, date AS d2
              FROM t2
              GROUP BY d2
          ) AS td
              ON t2.id=td.id
              AND t2.date=d2
      ORDER BY t2.date
      ) AS tt
    
    ON t1.date = tt.date ORDER BY t1.date
    
    你对cumulB也这么做。 在(我想)之后,将结果插入到表1中

    我希望我回答了你的问题

    很好的延续


    _Teddy

    我认为您只需要聚合和窗口功能:

    select t1.date,
           max(max(cumulativea)) over (order by t1.date),
           max(max(cumulativeb)) over (order by t1.date)
    from table1 t1 left join
         table2 t2
         on t1.date = t2.date
    group by t1.date;
    

    这将返回截至每个日期的两列的最大值,我认为这就是您试图描述的。

    提供一个fiddle(或创建表+插入脚本)有样本数据和预期结果以及解释。请参阅以表格形式提供样本数据和预期结果,这将有助于其他人快速做出反应。从3月到8月的每个日期(无重复或缺失日期)都显示了保证这一点的约束。表1中的每个日期都相同。cumulativeA和cumulativeB的问题是它们不会同时增加。因此,当您沿着表向下移动时,一次只更改一个(按id的顺序),并且一次只增加一个。同样的。你使用的是MySQL还是Postgresql?
    select t1.date,
           max(max(cumulativea)) over (order by t1.date),
           max(max(cumulativeb)) over (order by t1.date)
    from table1 t1 left join
         table2 t2
         on t1.date = t2.date
    group by t1.date;