这是一个现实生活中的例子,请看一下我的 sqlfiddle,
http://sqlfiddle.com/#!3/d8902/1
我有 3 个表,所有数据都应该转到的 TickData 和 2 个源表,其中的数据具有一些重叠数据,[ES 09-11_Part01] 和 [ES 09-11_Part02]。
请注意,虽然在 sqlfiddle 中我只填充了 2 个表 ES 09-11_Part0X 的数据量非常少,但我实际上每个源表处理了超过 400 万行。
我需要从 2 个表中将行插入到 TickData 中,并且需要避免重复,但是有两个警告。
首先,TickData.LastDateTime 是 [ES 09-11_Part0X].LastDate 和 [ES 09-11_Part0X].LastTime 的组合。
其次,只有在 [ES 09-11_Part0X] 中,CQGTickId 和 LastDate 与 LastTime 分别等于 TickId 和 TickData.LastDateTime 时才识别重复,CQGTickId 或 TickId 本身不是唯一的,它必须与日期字段组合。
如果记录已存在于 TickData 中,我将如何避免将任何重复项插入 TickData,不要从源表中插入 TickData 并且如果源表中有重复数据,[ES 09-11_Part0X] 它应该只插入一次进入 TickData。
在我的 sqlfiddle 中,请注意 [ES 09-11_Part02] 有 1 条记录已存在于 [ES 09-11_Part01]
('2011-04-05','14:12:07.4758734',12267,1,70,12267,12269,163377)
还 [ES 09-11_Part02] 在其自己的表中包含另一个重复出现 3 次
('2011-04-06','00:47:31.2748398',12272,1,12,12269,12272,194813)
因此,从源表中插入 2 次后 TickData 的最终输出不应包括第 6、9 和 10 行。应该只存在 1 次数据。
这是股票报价数据的真实示例,因此请务必准确可靠。我还必须使用其他源表不断更新 TickData,这些源表中可能再次具有重复和重叠的值。
提前感谢任何 TSQL 天才。:D
(原文链接:http ://sqlfiddle.com/#!3/c504b/1 )