ログ テーブルと照合する必要がある電話を含む一時テーブルがあります。
一時テーブル
- 電話 varchar(20)
 
ログテーブル
- 電話 varchar(20)
 - [ステータス] varchar(20)
 - 変更日日時
 
ログ テーブル データ
- ログ テーブル内のすべての電話のステータスは常に「追加済み」です。
 - ただし、すべての電話が「削除済み」のステータスになるわけではありません。
 
例:
電話ステータスの変更日
3054444444 2012 年 10 月 12 日追加
- 4445556666 2012 年 10 月 12 日追加
 - 3054444444 2012 年 11 月 12 日削除
 
Where 句には 2 つのセクションがあり、両方とも true でなければなりません
1. Temp.Phone は次の場合に参加できます。
- @Date が log.ChangeDate 以上です
 - log.Status = '追加'
 
ここがトリッキーな部分です....私には理解できません
2. Join では、次のことも確認する必要があります。
- @Date が log.ChangeDate より小さい
 - log.Status = '削除' の場合
 - log.Status = 'removed' が存在しない可能性があるため、存在するかどうかを確認し、存在しない場合は無視するか、どういうわけか true を生成する必要があります
 
SQL ステートメント
SELECT *
FROM #temp t
JOIN log l
ON t.Phone = l.Phone
WHERE  (l.ChangeDate < = @Date AND  l.Status = 'Added')    
  AND 
       (l.ChangeDate > @Date AND l.Status = 'Removed') --may not exist, but ALSO has to be true