0

結合する必要がある 2 つのデータ セットがありますが、データの品質が良くないため、追加の問題があります。

2 つのデータ セットは、Calls (通話) と Communications (通話に関して作成されたレコード) です。それぞれ call_id と comm_id という ID があります。通信レコードには、参加を実行するための call_id もあります。問題は、データ収集システムが最初から正しく機能していなかったことと、特定の通話に対応できない大量の通信があることです。すべての呼び出しが通信を生成するわけではありません。

毎日、結合リストを作成して分析を実行する必要があります。問題は、リンクの一部が不足しているため、3 つの異なる行タイプが得られることです。

  • ちょうど呼び出し、
  • ただの通信、
  • リンクされた通信と通話。

私がやりたいことは、特定の日付の「Just Comm」行であるすべての行に対して、同じ日付の「Just Call」行を削除する必要があることです。呼び出しからの値は必要ありません。呼び出しが発生したことを知る必要があるだけです。これを行うと、正しい数の行が得られます。これは、すべての「ただの通信」が「ただの呼び出し」行を削除するためです。これは、知る必要がある限り、通信を作成した呼び出しでした。

私の問題は、SSISでこれを行う方法です。必要なすべてのデータを含み、上記の 3 つの行タイプが混在するデータ セットを取得するところまで来ました。「Just Call」行を削除するプロセスをどのように進めることをお勧めしますか?

4

2 に答える 2

0

あなたの問題を完全に理解できたかどうかはわかりませんが、FULL OUTER JOIN で試すことができるかもしれません:

SELECT
  CL.ID AS CALL_ID,
  CL.DATE AS CALL_DATE,
  CM.ID AS COMM_ID,
  CM.DATE AS COMM_DATE
FROM
  CALLS CL
  FULL JOIN
  COMMUNICATIONS CM ON
    (CM.CALL_ID = CALL.ID)
WHERE
  (CL.ID IS NULL) OR
  (CM.ID IS NULL)

これにより、NULL コール ID または通信 ID のいずれかを含むすべての行 (つまり、「壊れたリンク」のある行) が返されます。

次に、これをビューとして使用し ( VCALLS_COMMSと呼びましょう)、それ自体に結合して、日付が一致する行を見つけることができます。

SELECT 
  VCC1.CALL_ID,
  VCC2.CALL_ID
FROM
  VCALLS_COMMS VCC1
  JOIN
  VCALL_COMMS VCC2 ON
    (VCC2.COMM_DATE = VCC1.CALL_DATE)

探しているものとは違うかもしれませんが、お役に立てば幸いです。

于 2009-04-22T11:26:11.407 に答える
0

SSIS についてはよくわかりませんが、最初に SQL をいくつか紹介できます。

通信と一致しない場合はデータを無視しても構わないと思っているので、通話にあまり関心がないようです。

私には、これは典型的な LEFT JOIN 状況のように聞こえます。

SELECT
  call.call_id,
  call.some_data,
  comm.comm._id
  comm.some_data,
FROM
  Communications comm
  LEFT JOIN Calls call ON call.call_id = comm.call_id
WHERE
  <date filter: today>

これにより、今日のすべての通信が得られ、正しくリンクされた通話のみがペアになります。今日の他のすべての呼び出しは、結果セットにはなりません。


編集:

OPのコメントから別の答えまで:

比類のない通話記録と通信記録をすべて取得したい。通話記録から始めて、同じ日の通信記録と一致するリストを下に移動します。各通信レコードは 1 回だけ使用する必要があります。通話レコードが一致する日付を持つ未使用の通信を見つけることができない場合、それは null のままにする必要があります...

このアプローチには重要な問題があります。

手順の後に残す必要がある「呼び出し」レコードはどれですか? TOP 17 (17 は今日の「通話/通信」ミスマッチ数)? 何が残っていますか?最近の電話?

結果セットに 17 個のランダムな呼び出しレコードを残すことは、どのような価値があるでしょうか? それらには、有用な情報はまったく含まれていません。それらは、あなたが取り消したものより優れているわけではありません。それらをどこかに表示するつもりですか: なぜですか?

LEFT JOIN を使用して、残りの数を単純に収集します。

于 2009-04-22T10:51:39.587 に答える