MySQL创建一个包含现有行

时间:2015-08-19 10:49:00

标签: mysql

我需要在表格中创建一个包含现有行总和的新行,并删除已汇总的列。此时删除不是优先事项,但肯定需要。

 t                   UL1     UL2    UL3     PL1       PL2   PL3        P     Q1      Q2  Q3  CosPhi1 CosPhi2 CosPhi3  i
2015-08-19 12:26:56 394.7   396.3   393.2   10.7    -180.9  46.5    -123.7  10.4    8.7 13.7    0.9      1.0   1.0    0
2015-08-19 12:26:55 394.8   396.4   393.4   10.6    -180.7  47.0    -123.2  12.0    8.8 13.9    0.8      1.0   1.0    0
2015-08-19 12:26:54 394.7   396.2   393.1   11.6    -180.5  46.5    -122.5   9.6    9.4 13.9    1.0      1.0   1.0    0

表格如下所示。每秒插入一次数据,表格包含数百万行。由于我不需要如此高的分辨率用于历史用途,我想以15分钟的间隔将它们相加并移除" old"数据。 需要求和的列是PL1,PL2,PL3和P.t可以是15分钟间隔内的任何时间。

我希望看起来像这样。

     t                      PL1    PL2   PL3     P    i
2015-08-19 12:26:56        33.0  -540.9  135.5 -375.7  0

我不确定如何对此进行查询,我们非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

 insert into table(PL1,PL2,PL3,p,i)   
 select sum(PL1),SUM(PL2),sum(PL3),sum(p),sum(i)

您需要添加一个存储布尔值的列。像is_summation_row之类的东西,每当添加总和时插入1,以便稍后可以使用

删除行
delete from tblName where is_summation_row=1

然后执行插入。

答案 1 :(得分:0)

你想在一个过程中混合两件事(或者三件),这很危险,很难测试,并且会产生很多负担。

我建议你采用更好的,经过验证的方法。

  1. 创建一个新表来存储聚合值。它可以具有与现有表相同的结构或略微不同的结构。仅保留要汇总的列,跳过其他列(UL1UL2UL3 a.s.o)。
  2. 编写一个脚本,从大表中选择数据块(例如,每次15分钟)计算聚合值并将它们插入新表中。它可以运行SQL查询来执行此操作(使用INSERT ... SELECT),或者它可以在应用程序端执行计算,您可以选择更适合您的公式和应用程序的工作流程。如果可能,将脚本安装为cron作业,每15分钟左右运行一次。它还可以删除处理过的数据,以保持旧表的纤薄,或者您可以保留它们,您决定。
  3. 修改应用程序的代码以使用新表来读取历史数据和旧表以获取最新数据。由于它们的结构和它们存储的数据的含义不同,最好的方法是使用现有代码从中读取,但编写映射到新表结构的新代码。 / LI>