Tenho duas tabelas, uma que contém o status de um cliente em uma determinada data e outra tabela que contém o histórico de transações de um cliente. Para uma determinada data de transação, quero extrair qual era o status dele naquela data de transação (com base na data de inserção mais recente (antes da data de transação) na tabela de status).
Eu tentei algumas vezes com self-joins e coisas assim e estou batendo em uma parede. Agradeço qualquer ajuda com antecedência.
Trabalhando com Snowflake SQL aqui.
Tabela de status
ACCT | INSERIR_DATA | STATUS |
---|---|---|
123 | 2023-05-31 | OURO |
123 | 2023-03-01 | PRATA |
Tabela Trans
ACCT | DATA_TRANSFERÊNCIA | AMT |
---|---|---|
123 | 2023-06-30 | 400 |
123 | 2023-04-01 | 222 |
Mesa desejada
ACCT | DATA_TRANSFERÊNCIA | STATUS |
---|---|---|
123 | 2023-06-30 | OURO |
123 | 2023-04-01 | PRATA |
Como você não especificou o banco de dados que usa, aqui está um exemplo para SQL Server
Conceitualmente o mesmo da resposta acima, aqui está a versão em floco de neve, já que você mencionou que é para o Snowflake.
1. Unimos a tabela Tran com a tabela Status para obter todas as correspondências possíveis onde os números de conta são os mesmos e o status
INSERT_DATE
é igual ou anterior aTRAN_DATE
.2. Em seguida, uma classificação é atribuída para a mesma conta e
TRAN_DATE
, com base no statusINSERT_DATE
, elas são ordenadas da mais recente para a mais antiga, de modo que a mais recenteINSERT_DATE
recebe a classificação 1.3. Isso é então filtrado usando
QUALIFY
para buscar o status mais recente para cadaTRAN_DATE
.Gera