我有一个包含客户交易的表格,我想创建一个表格:
Day Last Transaction Client
2020-01-01 2020-01-01 Alex <- Client first transaction
2020-01-02 2020-01-01 Alex
2020-01-03 2020-01-03 Alex <- New transaction
.....
每天我都想知道每个客户的最后一笔交易。
我有一个表,其中每个客户端的每个事务都有id和creation_date。
我尝试过但被卡住了:
"created_at",
id,
date_
from
(select
distinct
"on_behalf_of",
cast("created_at" as date) created_at
from raw_data"."raw_transactions")
right join
(select
date_add('day',s.n, first_date_year) date_,
id,
First_transaction
from (
select date_trunc('year', date '2020-01-01') as first_date_year) as genarate_seq
cross join
unnest(sequence(0,date_diff('day',date'2020-01-01',now()))) s (n)
cross join
(select
on_behalf_of id_pay,
cast(min(created_at) as date) First_transaction
from raw_data.raw_transactions
group by 1)
where date_add('day',s.n, first_date_year) >= First_transaction)
on "on_behalf_of" = id and created_at = date_
order by 2 asc , 3 asc;
I am using athena that use presto sql.
每天我都想知道每个客户的最后一笔交易。
我不知道您的复杂查询如何真正与您的问题相关。假设id
列表示client,并且creation_date
是每个事务的时间戳,则可以使用distinct on
进行如下操作:
select distinct on (id, creation_date::date)
id,
creation_date::date transaction_day,
creation_date transaction_date
from raw_transactions
order by id, creation_date::date, creation_date desc