2

我在 SQL SERVER“用法”中有一个包含 4 列的表

userID, appid, licenseid, dateUsed

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

所以查询

where dateUsed > @from  AND dateUsed < @dateTo

我想得到的是一个行表,比如

, appid, licenseid

有没有人知道怎么做?我一直在玩 count 作为子查询,然后尝试对结果求和,但还没有成功。

4

4 回答 4

3

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

SELECT appid, licenseid, COUNT(DISTINCT userID)
FROM usage
WHERE dateUsed BETWEEN @from AND @dateTo
GROUP BY appid, licenseid
于 2013-10-21T12:54:27.727 回答
2

像这样的东西应该工作:

SELECT   appid, licenseid, COUNT(DISTINCT userid) as DistictUsers
FROM     yourTable
WHERE    dateUsed BETWEEN @from AND @dateTo
GROUP BY appid, licenseid
于 2013-10-21T12:52:02.680 回答
0

只需复制、粘贴并运行以查看它是否按您希望的方式工作:

SELECT appId, licenseId, COUNT(userId)
FROM usage
WHERE dateUsed > @from AND dateUsed < @dateTo
GROUP BY appId, licenseId
于 2013-10-21T12:53:58.193 回答
0

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

于 2013-10-21T12:55:52.557 回答