PostgreSQL:合并表中的记录

时间:2018-07-16 11:03:31

标签: database postgresql merge duplicates

我有一个大表,其结构如下: enter image description here

如上图所示,主键由intervalstart和edgeid组成,因此该表中没有重复的条目。

我现在想做的是更新一些Edgeid,因为其中一些不推荐使用。 例如,我想用新的Edgeid“ E304178582From”更新所有具有edgeid“ E304178540From”的记录。如上图所示,这将失败,因为我会创建一个副本(但平均速度,measurementcount和Vehiclecount的值不同)。

因此,作为解决方案,我想“合并”这些记录(在此示例中,上图中的前两个条目),并通过计算平均值来计算平均速度,测量计数和车辆计数的新值。

看起来像这样:

  

intervalstart |天edgeid |平均速度|测量计数|车辆数量

     

2014-01-01 00:00:00 | 3 | E304178582来自| 85 | 1 | 120

有关如何解决此问题的任何建议? 谢谢您能给我的任何帮助!

1 个答案:

答案 0 :(得分:0)

一种选择是使用插入命令的ON Conflcit子句。语法如下:

INSERT INTO table_name(column_list) VALUES(value_list)
ON CONFLICT target action;

因此,请尝试插入一条新记录,这将导致冲突(基于时间戳和edgeid),在onflict子句中计算新的avg等。您可以使用EXCLUDED伪表引用原始值。

有关更多信息,请参阅此处的文档: https://www.postgresql.org/docs/9.5/static/sql-insert.html