2011-10-27 14 views
0

電話、ID(1 =クライアント、2 =オペレータ)の日付、メッセージ、およびその他のデータを含むクライアントとオペレータの間のコミュニケーションのためのテーブルがあります。私はこのSQL Server 2008.結果にカスタム行を並べ替えて挿入する

number1 operaters message 
number1 clients message 
number1 clients message 
number1 operaters message 
number1 *no message* 
. 
. 
. 

のようにテーブルをソートしますストアドプロシージャを作成する必要があり

は、bassically、私は次のoperatersメッセージの前にoperaterし、クライアントのメッセージで送信された最初のメッセージを見つける必要があります。 オペレータメッセージの後にクライアントの応答がない場合は、「no clients anwer」などの行を挿入する必要があります。

それは大きなテーブルなので、それは少ないステップであれば良いでしょう。

私は複数の列で注文する方法を知っていますが、最初のオペレータメッセージを見つける方法を知っていますが、必要に応じてこれらの行を挿入する方法がわかりません。

ご協力いただきありがとうございます。

そして、それはMSSQLです。

+0

これらのエントリにはタイムスタンプがありますか? –

+0

はい、タイムスタンプがあります。 –

+0

オペレータメッセージをクライアントメッセージとどのように一致させますか?彼らは常に(タイムスタンプの順序に関連して)連続しているはずですか、それを行う自己参照の外部キーがありますか?あなたの例では、各オペレータメッセージに複数のクライアントメッセージが存在することも示唆されています。 –

答えて

1

は、実際にそれをテストしていないが、この一般的な考え方は動作するはずです:平易な英語で

INSERT INTO YOUR_TABLE(NUMBER, DATE, USER_ID, MESSAGE) 
SELECT NUMBER, GETDATE(), 1, '*no message*' 
FROM YOUR_TABLE T1 
WHERE 
    USER_ID = 2      -- Operator. 
    AND NOT EXISTS (
     SELECT * 
     FROM YOUR_TABLE T2 
     WHERE 
      T1.NUMBER = T2.NUMBER 
      AND T1.DATE <= T2.DATE 
      AND USER_ID = 1   -- Client. 
    ) 

:若いクライアントメッセージを持たない各オペレータメッセージのために、新しいクライアントメッセージを挿入します。

(あなたのコメントに基づいて、USER_ID = 1は、クライアントとUSER_ID = 2オペレータを意味します。)

はまた、新たにそれを暗示している、(すなわち、それらのどれもが、将来的にではない)GETDATE()を使用すると、他のすべての日付が正しいと仮定していることに注意してください挿入されたメッセージは、その「親」オペレータメッセージより若いものでなければならない。それが仮定できない場合は、演算子メッセージのDATEにDATEADDを使用する必要があります。

関連する問題