Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Usando a função de agregação para filtrar o registro com base no carimbo de data/hora MIN


Existem várias maneiras de obter o registro mais antigo e evitar ter que digitar os mesmos critérios duas vezes.

Usando FETCH FIRST ROWS (disponível a partir do Oracle 12c)
select * 
from abc_customer_details cd
join abc_customers c on c.id = cd.customer_id
where cd.country_code = 'KE'
order by creation_timestamp
fetch first row only;

Usando um CTE (cláusula COM)
with cte as
(
  select * 
  from abc_customer_details cd
  join abc_customers c on c.id = cd.customer_id
  where cd.country_code = 'KE'
)
select *
from cte
where (creation_timestamp) = (select min(creation_timestamp) from cte);

Usando funções de janela
select *
from
(
  select cd.*, c.*, min(creation_timestamp) over () as min_creation_timestamp
  from abc_customer_details cd
  join abc_customers c on c.id = cd.customer_id
  where cd.country_code = 'KE'
)
where creation_timestamp = min_creation_timestamp;

(A propósito, alterei os critérios de junção em todas essas consultas. Parece extremamente improvável que você queira participar em abc_customer_details.id = abc_customers.customer_id .)