簡體   English   中英

如何在 SQL 中創建與分區不同的累計計數?

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

我有一個包含用戶數據的表,想創建一個不同的累積計數,但這種類型的 window function 不存在。 這是我的桌子

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         

現在,我想要一個像這樣的購買 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

我試過了

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

我得到一個錯誤,我不能將 count distinct 與 order by 語句一起使用。 該怎么辦?

像這樣的東西

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