((SQL)创建顺序的最后一个事务表

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

我有一个包含客户交易的表格,我想创建一个表格:

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
.....

每天我都想知道每个客户的最后一笔交易。

我有一个表,其中每个客户端的每个事务都有idcreation_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.


sql postgresql sequence greatest-n-per-group
1个回答
1
投票

每天我都想知道每个客户的最后一笔交易。

我不知道您的复杂查询如何真正与您的问题相关。假设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
© www.soinside.com 2019 - 2024. All rights reserved.