SQL中唯一标识符出现次数的运行计数

时间:2019-09-17 15:44:33

标签: sql sql-server

因此,我试图通过唯一标识符来获得一段时间内的使用情况连续计数,

E.G。

Date     UniqueID Running Count
1/1/2019 234567   1
1/1/2019 123456   1
1/2/2019 234567   2
1/3/2019 234567   3
1/3/2019 123456   2

基本上我希望能够看到在2019年1/3/3这是UniqueID 234567第三次出现在数据中。

我尝试过:

SELECT Date, UniqueID,
       count(UniqueID) OVER (ORDER BY Date, UniqueID rows unbounded preceding) AS RunningTotal

但这只是整体运行情况,因此不会使用新的UniqueID重置

SELECT Date, UniqueID, count(UniqueID) OVER (ORDER BY Date, UniqueID rows unbounded preceding) AS RunningTotal

有什么我可以做的以重置为每个唯一ID

1 个答案:

答案 0 :(得分:1)

假设最后一行的2是一个错字,则您需要ROW_NUMBER()DENSE_RANK()

SELECT Date, UniqueID,
       ROW_NUMBER(UniqueID) OVER (PARTITION BY UniqueID ORDER BY Date) AS RunningTotal

如果您一天只想计算一次,则可以使用DENSE_RANK()

顺便说一句,您可以也可以使用COUNT(*)来表达这一点:

SELECT Date, UniqueID,
       COUNT(*) OVER (PARTITION BY UniqueID ORDER BY Date) AS RunningTotal

在处理重复值方面有一些细微的差异。通常,COUNT()不会用于此目的,因为排名功能是如此普遍(且非常有用)。