sql >> Databáze >  >> RDS >> Oracle

Použití funkce agregace k filtrování záznamu na základě časového razítka MIN

Existuje několik způsobů, jak získat nejstarší záznam a vyhnout se nutnosti zadávat stejná kritéria dvakrát.

Pomocí FETCH FIRST ROWS (dostupné od 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;

Použití CTE (WITH klauzule)

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

Používání funkcí okna

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;

(Mimochodem, změnil jsem kritéria pro připojení ve všech těchto dotazech. Jen se zdá krajně nepravděpodobné, že se chcete připojit na abc_customer_details.id = abc_customers.customer_id .)



  1. ID posledního vložení MySql, konektor .net

  2. Sjednocení a uspořádání MySQL pomocí nápovědy

  3. Odstraňte zámky bez pid v postgresu

  4. Návrh databáze:jaký má smysl identifikace cizích klíčů?