问题描述
导入的表格
现在,我想加入表格。结果示例如下: 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;
这将返回到每个日期的两列最大值,我想这就是您要描述的内容。