【问题标题】:SQL count of distinct records against multiple criteria针对多个条件的不同记录的 SQL 计数
【发布时间】:2013-10-21 12:43:45
【问题描述】:

我在 SQL SERVER “用法”中有一个表,它由 4 列组成

userID, appid, licenseid, dateUsed

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

所以查询

where dateUsed > @from  AND dateUsed < @dateTo

我想要返回的是一个行表

、appid、licenseid

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

【问题讨论】:

  • 你能把你到目前为止所做的整个查询贴出来吗?

标签: sql sql-server tsql


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这样的事情应该可以工作:

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

    【讨论】:

      【解决方案3】:

      只需复制、粘贴并运行,看看它是否如您所愿:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2011-09-26
          • 2012-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-12
          • 2021-11-20
          相关资源
          最近更新 更多