SQL Group By 仅包含以前未在 table 中的不同条目

SQL Group By only incude distinct entries not previously in table

我正在使用 SQL server 2008。我有一个用户 table 保存用户及其与系统中提案的关系。当一个用户被分配到一个提案时,每个记录的用户都会被添加到系统中。一个用户可以在用户 table 中显示多次。 PK 是 User + Proposal。我有几个专栏,但感兴趣的是 UserIdProposalDateCreated。我正在尝试针对此 table 编写一个查询,以显示每年添加了多少用户。我正在使用 group by DATEPART(year, DateCreated) 但是,当然,这将复制与不同年份的提案关联的用户。这是一些数据:

User    Proposal    DateCreated
user1   proposal1   1/1/2010
user2   proposal2   1/1/2010
user3   proposal2   1/1/2010
user4   proposal3   1/1/2010
user2   proposal4   1/1/2011
user5   proposal4   1/1/2011
user3   proposal5   1/1/2011
user6   proposal5   1/1/2011
user7   proposal6   1/1/2011

我搜索的结果是

NumUsersAdded       YearAdded
4                   2010
3                   2011

2010 年添加了 user1、2、3、4。2011 年添加了 user5、6、7。从 2011 年的总和中排除 user2 和 user3 是我遇到的问题。

这很简单,你只需要使用NOT EXISTS:

SELECT  DATEPART(YEAR,DateCreated) YearAdded,
        COUNT(DISTINCT [User]) NumUsersAdded
FROM dbo.YourTable T
WHERE NOT EXISTS(SELECT 1 FROM dbo.YourTable
                 WHERE [User] = T.[User]
                 AND DateCreated < T.DateCreated)
GROUP BY DATEPART(YEAR,DateCreated);

一种方法是 select 每个用户的最小年份,然后计算这些:

SELECT   YearCreated, COUNT(*)
FROM     (SELECT    UserId, DATEPART(year, MIN(DateCreated)) AS YearCreated
          FROM      users
          GROUP BY  UserId) t
GROUP BY YearCreated