sql - 可以使用 DISTINCT 进行分区函数 COUNT() OVER

标签 sql sql-server tsql sql-server-2008-r2 sql-server-2014

我正在尝试编写以下内容,以获得不同 NumUsers 的运行总数,如下所示:

NumUsers = COUNT(DISTINCT [UserAccountKey]) OVER (PARTITION BY [Mth])

管理工作室似乎对此不太高兴。当我删除 DISTINCT 关键字时,错误消失,但它不会是一个不同的计数。

DISTINCT 在分区函数中似乎不可能。 我如何找到不同的计数?我是否使用更传统方法,例如相关子查询?

进一步研究一下,也许这些 OVER 函数的工作方式与 Oracle 不同,因为它们不能在 SQL-Server 中用于计算运行总计。

我在 SQLfiddle 上添加了一个实例我尝试使用分区函数来计算运行总计。

最佳答案

有一个非常简单的解决方案,使用 dense_rank()

dense_rank() over (partition by [Mth] order by [UserAccountKey]) 
+ dense_rank() over (partition by [Mth] order by [UserAccountKey] desc) 
- 1

这将准确地满足您的要求:每个月内不同 UserAccountKey 的数量。

关于sql - 可以使用 DISTINCT 进行分区函数 COUNT() OVER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11202878/

相关文章:

sql - sql中现有行的多个插入查询

sql - 在 ms sql server 的 char 列中存储的日期或整数值上使用关系运算符是否有效?

python - Django 管理员 : Prefetch choices in list_editable

sql-server - 安装了 Microsoft SQL Server 也找不到?

mysql - 复合键为空且插入时约束失败

sql-server - SQL 更新连接多个表(如果字段存在)

sql-server - 如何使用 T-SQL 内置函数的值更新 XML 列?

sql-server - 当更新的值不是太长时,我怎么能得到 "String or binary data would be truncated"?

sql - 为什么 null 不在(1,2,3)中 false

mysql - 通信中的最后一条消息