0

这是一个现实生活中的例子,请看一下我的 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 )

4

2 回答 2

0

Try with this: http://sqlfiddle.com/#!3/c504b/12

WHERE NOT EXISTS ( SELECT 1 FROM [TickData] t 
    Where t.LASTDATETIME = cast(p.[LastDate] as datetime) + cast(p.[LastTime] as datetime)
    And t.LAST = p.Last
    And t.BID = p.Bid
    And t.ASK = p.Ask
    And t.TICKID = p.CQGTickId )
于 2014-03-12T02:18:52.800 回答
0
WITH CTE_TABLE 
AS
(SELECT * FROM TABLE1
UNION 
SELECT * FROM TABLE 2)
INSERT INTO YOUR_TABLE
SELECT * FROM CTE_TABLE
于 2014-03-12T02:22:37.877 回答