防止数据库中的双重聚合

时间:2018-04-13 12:56:56

标签: sql postgresql aggregate

我使用以下查询来聚合表。

INSERT INTO aggreagtion_table 
SELECT CAST(EXTRACT('epoch' FROM timestamp)/60 AS BIGINT)*60 AS ts, COUNT(aggregated_value)
FROM aggregated_table
GROUP BY ts

效果很好,但是第二次运行此查询会重新聚合已经聚合的数据 是否有解决这个问题的方法永远不会丢失或双重汇总任何数据?

为了防止错误的答案,我会说保存最后的聚合时间并仅聚合较新的条目会丢失在聚合开始后但在同一秒内添加的行。

1 个答案:

答案 0 :(得分:1)

您可能需要做的是向表中添加聚合标志,并在聚合数据时为每个数据值设置该标志(当您这样做时,可能需要锁定表以防止写入之间的争用情况写数据并汇总它)。然后,您将为查询添加一个条件,以便仅汇总未设置标志的数据。 所以像这样:

sudo make