将“上周”和“2周前”添加到SQL查询

将“上周”和“2周前”添加到SQL查询,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我创建了下面的代码,它为我提供了按公司细分的唯一用户数。我想添加一个日期修饰符,它有两列,一列用于上周,另一列用于两周前。我希望这些列根据字段users.date分别显示前一周日期和前一周的活动用户。任何帮助都会很棒。我正在使用SQLServerManagementStudio 2008 R2 --Active Users SELECT company.companyName as 'Group Name', COUNT(distinct users.userid) [Coun

我创建了下面的代码,它为我提供了按公司细分的唯一用户数。我想添加一个日期修饰符,它有两列,一列用于上周,另一列用于两周前。我希望这些列根据字段users.date分别显示前一周日期和前一周的活动用户。任何帮助都会很棒。我正在使用SQLServerManagementStudio 2008 R2

 --Active Users
    SELECT company.companyName as 'Group Name',
    COUNT(distinct users.userid) [Count]
    FROM Users, Company 
    WHERE 
    Jobstate = '6'
    and company.companyID = users.companyid
    and company.companyID in (1,4,31)
    GROUP BY company.companyName
目前,我收到了以下信息:

Group Name | Count     |
------------------------
Company 1  | 104       |
Company 2  | 74        |
Company 3  | 46        |
我希望看到的是:

Group Name | Last Week | 2 Weeks Ago |
--------------------------------------
Company 1  | 14        | 16          |
Company 2  | 7         | 12          |
Company 3  | 4         | 8           |

对于SQL Server,它看起来是这样的

SELECT
  Company.CompanyName AS [Group Name],
  COUNT(DISTINCT Users.UserId) AS [Count],
  SUM (CASE 
         WHEN DATEDIFF(day, Users.Date, GETDATE()) < 7 THEN 1
         ELSE 0
       END
      ) AS [Last Week]
  -- Additional columns for last 2 weeks, etc.
FROM Users, Company 

WHERE 
  Jobstate = '6'
  AND Company.CompanyId = Users.CompanyId
  AND Company.CompanyId in (1, 4, 31)
GROUP BY
  Company.CompanyName
编辑:上面的查询统计用户,而不是不同的用户。如果您希望上周使用不同的用户,只需修改原始查询即可

SELECT
  Company.CompanyName AS [Group Name],
  COUNT(DISTINCT Users.UserId) AS [Last Week]
FROM Users, Company 

WHERE 
  Jobstate = '6'
  AND Company.CompanyId = Users.CompanyId
  AND Company.CompanyId in (1, 4, 31)
  AND DATEDIFF(day, Users.Date, GETDATE()) < 7
GROUP BY
  Company.CompanyName
如果要将这两种方法结合在一起,以便将所有列都放在一个数据集中,可以通过以下两种方法结合使用:

SELECT
  Company.CompanyName AS [Group Name],
  COUNT(DISTINCT Users.UserId) AS [Count],
  COUNT (DISTINCT
           CASE 
             WHEN DATEDIFF(day, Users.Date, GETDATE()) < 7 THEN Users.UserId
             ELSE NULL
           END
        ) AS [Last Week]
  -- Additional columns for last 2 weeks, etc.
FROM Users, Company 

WHERE 
  Jobstate = '6'
  AND Company.CompanyId = Users.CompanyId
  AND Company.CompanyId in (1, 4, 31)
GROUP BY
  Company.CompanyName

SQL Server=、MySQL=和其他风格也有类似之处。从这里开始,如果结果是7天,就需要知道比较的术语。也许我遗漏了一些东西,但这似乎不能产生准确的结果。下面是它返回的数据:Group Name | Count | Last Week |------Company 1 | 12 | 412 | Company 2 | 16 | 308 | Company 3 | 55 | 629 | Count应该是不同用户的总数,而Last Week应该只是该周出现的不同用户的计数,因此,上周的分数不应该高于count对不起,我没有正确理解这个问题。第一个查询统计用户,而不是不同的用户。如果你想在上周使用不同的用户,那就简单多了,因为你可以调整原始查询。见编辑。非常感谢您njr101。您编辑的查询已生成我所需的结果。这肯定会帮助我继续进行任何其他查询!