计算相对于日期的不同客户

问题描述 投票:0回答:1

我试图从该表中找到交易时间之前的交易客户端 ID 的不同计数,并将该计数与每个交易相关联

交易ID 客户编号 交易日期
t1 C1 2024年1月1日
t2 C2 2024年1月2日
t3 C2 2024年1月2日
t4 C3 2024年1月3日
t5 C1 2024年1月4日
t6 C4 2024年1月5日

所需输出:

交易ID 客户编号 交易日期 之前的不同客户数量
t1 C1 2024年1月1日 0
t2 C2 2024年1月2日 1
t3 C2 2024年1月2日 1
t4 C3 2024年1月3日 2
t5 C1 2024年1月4日 3
t6 C4 2024年1月5日 3

我尝试使用

select
transaction id,
client id,
transaction date,
count(distinct client id) over (order by transaction date asc rows between unbounded preceding and 1 preceding)
from 
<table name>

但是,snowflake 不支持在窗口函数中使用包含 ORDER BY 子句进行 DISTINCT 操作的 OVER 子句。

我还试图避免自连接查询,因为事务表非常大。任何有关替代方案的帮助将不胜感激。

sql snowflake-cloud-data-platform
1个回答
0
投票
create or replace table transaction_client as     
select 
  column1 as transaction_id, 
  column2 as client_id, 
  column3 as transaction_date 
from 
values 
  ('t1', 'C1', '01/01/2024'), 
  ('t2', 'C2', '01/02/2024'), 
  ('t3', 'C2', '01/02/2024'), 
  ('t4', 'C3', '01/03/2024'), 
  ('t5', 'C1', '01/04/2024'), 
  ('t6', 'C4', '01/05/2024');
  
  
select 
  a.transaction_id, 
  a.client_id, 
  a.transaction_date, 
  count(distinct b.client_id) as prior_distinct_client_count 
from 
  transaction_client a 
  left join transaction_client b 
 on b.transaction_date < a.transaction_date 
group by  a.transaction_id,a.client_id, a.transaction_date 
order by a.transaction_date;
© www.soinside.com 2019 - 2024. All rights reserved.