2016-10-28 11 views
1

この質問の適切なタイトルは何かを知っていましたか。 私はしばらくこのことに苦労してきました。 私は2つのテーブルを持っています。 表1:オブジェクトID、電子メールの日付と応答フラグのレコードを保持します 表2:オブジェクトIDと応答日のレコードを保持します。SQLの更新ステートメント値は以前の値よりも大きいはずですが、次の値よりも小さい

表1の応答フラグを更新する必要がありますが、各表の同じオブジェクトIDに対して複数のレコードが存在するため、表2の応答日は以前の電子メール日付よりも大きく、次の電子メール日付よりも小さくなければなりません表2.

望ましい結果

enter image description here

すべてのヘルプや提案をいただければ幸いです。 ありがとうございます。

答えて

1

これを行うには、結合を使用します。 Table2のObjectIdと一致する行を探して、ResponseDateが最も大きいEmailDateが>私たちのEmailDateであるResponseDateが最も小さいEmailDateが<である行を探します。

UPDATE t1 
SET t1.ResponseFlag = (CASE WHEN t2.ObjectId IS NOT NULL THEN 1 ELSE 0 END) 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t2.ObjectId = t1.ObjectId AND 
         t1.EmailDate = (SELECT MAX(EmailDate) FROM Table1 
             WHERE ObjectId = t1.ObjectId AND EmailDate < t2.ResponseDate) AND 
         t2.ResponseDate = (SELECT MIN(ResponseDate) FROM Table2 
              WHERE ObjectId = t1.ObjectId AND ResponseDate > t1.EmailDate) 
関連する問題