针对多个条件的不同记录的SQL计数

时间:2013-10-21 12:43:45

标签: sql sql-server

我在SQL SERVER“用法”中有一个由4列

组成的表
userID, appid, licenseid, dateUsed

现在我需要查询表格,以便我可以在一个时间范围内找到有多少用户在许可证下使用了应用程序。请记住,即使用户1在1月1日和2日使用该应用程序,他们也只会在结果中计为1。即时间范围内的独特用户。

如此查询

where dateUsed > @from  AND dateUsed < @dateTo

我想要回来的是一个像

这样的行表

,appid,licenseid

有没有人有任何想法?我一直在玩伯爵作为子查询,然后试图总结结果,但还没有成功。

4 个答案:

答案 0 :(得分:3)

刚刚对此进行了测试并提供了您想要的结果:

SELECT appid, licenseid, COUNT(DISTINCT userID)
FROM usage
WHERE dateUsed BETWEEN @from AND @dateTo
GROUP BY appid, licenseid

答案 1 :(得分:2)

这样的事情应该有效:

SELECT   appid, licenseid, COUNT(DISTINCT userid) as DistictUsers
FROM     yourTable
WHERE    dateUsed BETWEEN @from AND @dateTo
GROUP BY appid, licenseid

答案 2 :(得分:0)

只需复制,粘贴并运行以查看它是否按预期工作:

SELECT appId, licenseId, COUNT(userId)
FROM usage
WHERE dateUsed > @from AND dateUsed < @dateTo
GROUP BY appId, licenseId

答案 3 :(得分:0)

您尚未在此处发布查询,但是。我建议您使用PARTITION BY为每个许可证ID生成唯一的行数。您可以使用每个单独的许可证为用户数创建子查询。 SELECT .... FROM此子查询并使用HAVING子句过滤您的首选日期/用户。也许不是最好的解释。 请发布示例查询。