次のような簡単なクエリがあります。
SELECT subs.id_number,
op.dtupdated as dtopened
FROM subscribers AS subs
LEFT OUTER JOIN messages AS msg
ON msg.id_number = subs.id_number
LEFT JOIN email_opens AS op
ON op.message_id = msg.message_id
WHERE op.dtupdated > dateadd(month,-3,CURRENT_TIMESTAMP)
基本的に、id_number フィールドによってサブスクライバーに関連付けられている電子メールがいつ開かれたか (email_opens) を追跡するテーブル内のすべてのレコードを取得しようとしています。過去 3 か月以内に開封されたすべてのメールと関連する id_number を取得したいのですが、サブスクライバー テーブルにすべての id 番号を少なくとも 1 回は含めたいと考えています。
問題は、where 句が、過去 3 か月間に電子メールを開いたことがなかったすべてのレコードを除外することですが、id_number と "NULL" を持つ 1 つのレコードを、開いていない購読者のために dtopened として含めたいと考えています。
左外部結合、ユニオン(これは機能しますが、重複があります)を試しましたが、これを行う方法がわかりません。簡単な方法が必要だと確信していますが、まだ十分なコーヒーを飲んでいません。