从所有其他行合并选定的值mysql

时间:2017-02-11 11:14:49

标签: mysql sql

我遇到了问题而我没有解决方案。

我有嵌入式系统(具有独特的site_id:s)向MYSQL服务器报告具有一定周期的温度。 有时外部温度T00已损坏(我将手动检测),在这种情况下,我想将site_id 1中的T00替换为site_id 2中的T00。

我想通过查看calculated_time_stamp来查找我能找到的最接近的温度。在下一个或前23分钟内,site_id 2始终存在有效温度。我想在当时典型的5000条记录中这样做。

如果我选择site_id 1和2,输出将如下所示:

Site_id calculated_time_stamp  T00  T01   T02  
   1    2017-02-12 21:00:00    25   32.0  28.2  
   2    2017-02-12 21:15:00    2.3  31.0  29.1  
   1    2017-02-12 21:23:43    25   32.3  28.0  
   2    2017-02-12 21:38:42    2.4  33.3  28.1  

在我执行一些我无法自己解决的SQL交换魔法后,我希望它看起来像这样:

 Site_id    calculated_time_stamp   T00  T01   T02  
       1    2017-02-12 21:00:00     2.3  32.0  28.2  
       2    2017-02-12 21:15:00     2.3  31.0  29.1  
       1    2017-02-12 21:23:43     2.4  32.3  28.0  
       2    2017-02-12 21:38:42     2.4  33.3  28.1  

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

UPDATE table_name a
SET a.t00 =
  (SELECT b.t00 FROM table_name b 
     WHERE TIME_TO_SEC(timediff(a. calculated_time_stamp, b. calculated_time_stamp)) < 23*60
     AND b.site_id=2)
WHERE a.site_id=1

尝试使用类似的东西