如何通过从一个表中提取最大数目然后到另一个表中来合并两个SQL表?

问题描述

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

导入的表格

  1. 表3 Case No. is the primary key. Each report date shows one patient. Depending on if the patient is import or local,the cumulative column increases. You can see some days there are no cases so the date like 25/01/2020 is skipped

  2. 表2 Report date has no duplicate.

现在,我想加入表格。结果示例如下: enter image description here

每个日期的最大累积值被合并到新表中。因此,尽管表3的26/01/2020显示从6、7增加到8,但我只想要那里的最高累积数。

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

我通过替换实际名称尝试了Gordon Linoff的名称(由于我认为它们模棱两可,我最初将其省略了。)

他的代码如下(我赞成):

SELECT t3.`Report date`,max(max(t3.cumulative_local)) over (order by t3.`Report date`),max(max(t3.cumulative_import)) over (order by t3.`Report date`)
from table3 t3 left join
    table2 t2
    using (`Report date`)
group by t2.`Report date`;

但是我遇到了错误

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。我想这将是每天存储Max cumulA和cumulB。

您必须首先自联接table2才能找到每个日期(带有GROUP BY日期)的最大值:

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

之后,您将左连接table1联接到self-join table2的结果上,使每一天都有。

SELECT * FROM `t1` LEFT JOIN t2 ON t1.date = t2.date ORDER BY t1.date

这是2个连接点的融合:

SELECT * FROM `t1` LEFT JOIN (

  SELECT t2.id,cA
  FROM t2
      JOIN (
          SELECT id,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;

这将返回到每个日期的两列最大值,我想这就是您要描述的内容。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...