私は次のテーブルで作業しています(以下にダミーデータが含まれています。実際のテーブルには約50Kのレコードがあります)
テーブル All_Users
ID, Domain, ReportDate, SamAccountName
1, Win1, 1/7/2013, user1
2, Win1, 1/7/2013, user2
3, Win1, 1/7/2013, user3
4, Win1, 1/14/2013, user1
5, Win1, 1/14/2013, user2
6, Win1, 1/14/2013, user3
7, Win1, 1/21/2013, user1
8, Win1, 1/21/2013, user2
9, Win1, 1/21/2013, user3
10, Win1, 1/21/2013, user4
11, Win1, 1/21/2013, user5
毎週、AD から抽出物を取得し、SQL Server データベースにアップロードします ([レポートの日付] 列で識別されます)。目標は、クエリを実行して、特定の日付範囲に追加された新しい AD アカウントを識別できるようにすることです。
E.g, identify new AD accounts added from 1/7/2013 through 1/21/2013
The result should be:
10, Win1, 1/21/2013, user4
11, Win1, 1/21/2013, user5
現在、次のようなクエリがあります。
SELECT DISTINCT ReportDate, SamAccountName, Domain, ID
FROM dbo.tbl_All_Users
WHERE (NOT (SamAccountName IN
(SELECT SamAccountName
FROM tbl_All_Users
WHERE (ReportDate = '1/7/2013')))) AND (ReportDate = '1/21/2013')
これは最初は機能していましたが、テーブルが大きくなるにつれて、クエリがタイムアウトし始めました (明らかな理由で、少し効率的ではありません)。
これを行う効率的な方法は何ですか?内部結合を使用してみました (このサイトの投稿で見たように) が、特定のケースに適合させることができないようです。そして、SQLの知識が不足しているため、それを理解できないようです。