Oracle
 sql >> Database >  >> RDS >> Oracle

Utilizzo della funzione di aggregazione per filtrare il record in base al timestamp MIN

Esistono diversi modi per ottenere il record più precoce ed evitare di dover digitare gli stessi criteri due volte.

Utilizzo di FETCH FIRST ROWS (disponibile a partire da 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;

Utilizzo di un CTE (CON clausola)

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);

Utilizzo delle funzioni della finestra

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 proposito, ho cambiato i criteri di unione in tutte queste query. Sembra estremamente improbabile che tu voglia partecipare a abc_customer_details.id = abc_customers.customer_id .)