将“上周”和“2周前”添加到SQL查询
我创建了下面的代码,它为我提供了按公司细分的唯一用户数。我想添加一个日期修饰符,它有两列,一列用于上周,另一列用于两周前。我希望这些列根据字段users.date分别显示前一周日期和前一周的活动用户。任何帮助都会很棒。我正在使用SQLServerManagementStudio 2008 R2将“上周”和“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
--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。您编辑的查询已生成我所需的结果。这肯定会帮助我继续进行任何其他查询!