我正在使用下表(下面包含虚拟数据;实际表也有大约 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 数据库(由 Report date 列标识)。目标是能够运行查询以识别为特定日期范围添加的新 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 知识,我似乎无法弄清楚。