【发布时间】:2020-06-06 03:16:42
【问题描述】:
我有一个事实表不断插入大量记录。它用于另一个表中原始记录的 ML 预测结果。由于插入的频率非常高,我想在插入新批次的结果之前只保留最后一批的预测结果。如何编写查询以删除旧记录,同时只保留每个 record_id 的最新副本?
+--------+-----------+------------+------------+
| row_id | record_id | prediction | insert_ts |
+--------+-----------+------------+------------+
| 1 | 101 | cat | 2020-06-04 |
| 2 | 102 | dog | 2020-06-04 |
| 3 | 103 | tiger | 2020-06-04 |
| 4 | 101 | tiger | 2020-06-05 |
| 5 | 102 | lion | 2020-06-05 |
| 6 | 101 | dog | 2020-06-06 |
+--------+-----------+------------+------------+
在我运行查询后,表中应该有以下内容。
+--------+-----------+------------+------------+
| row_id | record_id | prediction | insert_ts |
+--------+-----------+------------+------------+
| 3 | 103 | tiger | 2020-06-04 |
| 5 | 102 | lion | 2020-06-05 |
| 6 | 101 | dog | 2020-06-06 |
+--------+-----------+------------+------------+
我发现一些帖子建议截断表格并插入最新的记录。但这会弄乱 serial 的 row_id 并在其他表中用作外键引用。我该如何编写这个delete 查询?
【问题讨论】:
-
你为什么不创建一个新表。
-
@zealous 如何保留剩余记录的旧 row_id 以及 row_id 的序列 nextval?
标签: sql postgresql