【发布时间】:2015-12-03 14:25:57
【问题描述】:
Table 1 Table 2
-------- --------
oid oid (J)
sequence trip_id
stop
trip_update_id (J)
(J) = join
Table 1 和 Table 2 每 30 秒同时从一个 api 更新一次。
在每天结束时,Table 1 填充了 98% 的重复数据,这是因为数据馈送既包括过去 30 秒内生成的新数据,也包括同一天之前馈送中生成的所有数据。结果Table 1 填充了大部分重复数据(在插入时会自动生成 oid,因此所有 oid 都是唯一的)。
Table 2 具有所有唯一记录,因此我的问题是将Table 1 转换为Table 2 中每个trip_id 的所有唯一记录的sql 是什么。
【问题讨论】:
-
从表中删除重复(去重)记录的方法有很多种,每种方法各有优缺点。使用相关子查询 使用临时表 创建具有不同记录的新表并重命名它.. 使用公用表表达式 (CTE) 在 SSIS 中使用模糊组转换 使用 MERGE 语句
-
我会改为增强从 API 获取数据的插入脚本,以确保它在插入之前检查数据。插入脚本将使用 MERGE 或其他 UPSERT 方法。
-
您使用的是哪个 DBMS?后格雷斯?甲骨文?
-
Fora table1 trip_update_id 值,保留哪一行?最低/最高 oid?
-
那么,如果
oid是唯一的,但在 Table_1 和 Table_2 之间共享(用于连接)值,并且 Table_2 没有重复项,为什么不只是“DELETE FROM Table_1 WHERE oid NOT IN (SELECT oid FROM Table_2)”?
标签: sql database postgresql duplicate-removal