繁体   English   中英

SQL 在不断增长的时间范围内计算不同的用户

[英]SQL counting distinct users over a growing timeframe

我认为我没有正确命名这个,但本质上我希望能够计算不同的用户,但随着时间的推移考虑那些以前的不同用户。 例如,假设我们有一个用户购买的数据集:

Date    | User 
-----------------
2/3/22  |   A  
2/4/22  |   B
2/22/22 |   C
3/2/22  |   A
3/4/22  |   D
3/15/22 |   A
4/30/22 |   B

一般来说,如果我按照正常情况计算按月分组的差异,我们会得到:

Date    | Count 
-----------------
2/1/22  |   3  
3/1/22  |   2
4/1/22  |   1

但我真正想看到的是不同用户的总数在一段时间内如何增加。

Date    | Count 
-----------------
2/1/22  |   3  
3/1/22  |   4
4/1/22  |   4

因此,第一个月将是 3 个不同的用户。 考虑到不同用户的总数增加了“D”,第二个月为 4,而“A”没有被计算在内,因为它在上个月已经被识别为独立用户。 第三个月仍然是 4,因为当月没有新的不同用户执行操作。

任何帮助将不胜感激(即使它只是一个更好的标题,以便更恰当地接触更多人哈哈)

这是一个基于Postgres中运行 sum 的解决方案,应该可以很好地转换为Vertica

select  date_trunc('month', "Date") as "Date"
       ,sum(count(case rn when 1 then 1 end)) over (order by date_trunc('month', "Date")) as "Count"
from    (
        select  "Date"
               ,"User"
               ,row_number()  over(partition by "User" order by "Date") as rn
        from    t
        ) t
group by  date_trunc('month', "Date")
order by "Date"
日期 数数
2022-02-01 00:00:00 3
2022-03-01 00:00:00 4
2022-04-01 00:00:00 4

小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM