简体   繁体   English

如何在 SQL 中创建与分区不同的累计计数?

[英]How to create a cumulative count distinct with partition by in SQL?

I have a table with user data and want to create a cumulative count distinct but this type of window function does not exist.我有一个包含用户数据的表,想创建一个不同的累积计数,但这种类型的 window function 不存在。 This is my table这是我的桌子

date       | user-id | purchase-id
2020-01-01 | 1       | 244         
2020-01-03 | 1       | 244         
2020-02-01 | 1       | 524         
2020-03-01 | 2       | 443         

Now, I want a cum count distinct for purchase id like this:现在,我想要一个像这样的购买 ID 的不同计数:

date       | user-id | purchase-id | cum_purchase
2020-01-01 | 1       | 244         | 1
2020-01-03 | 1       | 244         | 1
2020-02-01 | 1       | 524         | 2
2020-03-01 | 2       | 443         | 1

I tried我试过了

Select 
dt, 
user_id, 
count(distinct purchase_id) over (partition by user_id ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as cum_ct
from table

I get an error that I cannot use count distinct with an order by statement.我得到一个错误,我不能将 count distinct 与 order by 语句一起使用。 What to do?该怎么办?

Something like this像这样的东西

Select 
  dt as [date], 
  user_id, 
  purchase_id
  SUM(CASE WHEN rn = 1 THEN 1 ELSE 0 END) over (partition by user_id ORDER BY dt ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as cum_ct
from (
  SELECT 
    dt,
    user_id,
    purchase_id,
    ROW_NUMBER() OVER (PARTITION BY user_id, purchase_id ORDER BY dt) as RN
  FROM sometable  
) sub

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

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