我试图从该表中找到交易时间之前的交易客户端 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 子句。
我还试图避免自连接查询,因为事务表非常大。任何有关替代方案的帮助将不胜感激。
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;