Oracle
 sql >> Base de données >  >> RDS >> Oracle

Utilisation de la fonction d'agrégation pour filtrer l'enregistrement en fonction de l'horodatage MIN

Il existe plusieurs façons d'obtenir l'enregistrement le plus ancien et d'éviter d'avoir à saisir deux fois les mêmes critères.

Utilisation de FETCH FIRST ROWS (disponible à partir d'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;

Utiliser une CTE (clause WITH)

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

Utiliser les fonctions de fenêtre

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;

(Au fait, j'ai modifié les critères de jointure dans toutes ces requêtes. Il semble tout simplement extrêmement peu probable que vous souhaitiez vous joindre à abc_customer_details.id = abc_customers.customer_id .)