0

これは実際の例です。私の sqlfiddle を見てください。

http://sqlfiddle.com/#!3/d8902/1

すべてのデータが送信される TickData と、[ES 09-11_Part01] および [ES 09-11_Part02] という重複データを持つデータを含む 2 つのソース テーブルの 3 つのテーブルがあります。

注意してください、sqlfiddle では ES 09-11_Part0X の 2 つのテーブルにデータを入力しただけですが、実際には各ソース テーブルで 400 万行以上を扱っています。

2 つのテーブルから TickData に行を挿入する必要があり、重複を避ける必要がありますが、2 つの注意点があります。

まず、TickData.LastDateTime は [ES 09-11_Part0X].LastDate と [ES 09-11_Part0X].LastTime を合成したものです。

次に、[ES 09-11_Part0X] から、CQGTickId および LastTime を含む LastDate がそれぞれ TickId および TickData.LastDateTime と等しい場合にのみ、重複が識別されます。CQGTickId または TickId 自体は一意ではなく、日付フィールドと組み合わせる必要があります。

レコードが TickData に既に存在する場合、TickData に重複を挿入しないようにするにはどうすればよいですか。ソース テーブルから TickData に挿入しないでください。また、ソース テーブルに重複データがある場合は [ES 09-11_Part0X] 1 回だけ挿入する必要があります。 TickData に。

私のsqlfiddleでは、[ES 09-11_Part02]には[ES 09-11_Part01]にすでに存在する1つのレコードがあることに注意してください

('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 回だけ存在する必要があります。

これは Stock Ticks データの実際の例であるため、正確で信頼できるものである必要があります。また、TickData を追加のソース テーブルで継続的に更新する必要があります。このソース テーブルには、値が重複して重複している可能性があります。

TSQL の天才に感謝します。:D

(元のリンク: http://sqlfiddle.com/#!3/c504b/1 )

4

2 に答える 2

0

これを試してください: 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 に答える