sql >> Databasteknik >  >> RDS >> Oracle

Använder aggregeringsfunktion för att filtrera post baserat på MIN tidsstämpel

Det finns flera sätt att få den tidigaste posten och att undvika att behöva skriva samma kriterier två gånger.

Använda FETCH FIRST ROWS (tillgänglig från och med 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;

Använda en CTE (WITH-sats)

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

Använda fönsterfunktioner

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;

(Jag ändrade förresten anslutningskriterierna i alla dessa frågor. Det verkar bara extremt osannolikt att du vill gå med på abc_customer_details.id = abc_customers.customer_id .)



  1. Hur man filtrerar poster med aggregatfunktion AVG

  2. MySQL:Två n:1-relationer, men inte båda samtidigt

  3. Hur avslutar jag ett skript i SQLPlus när ett fel uppstår och återgår till SQLPlus-prompten, utan att koppla bort eller avsluta SQLPlus?

  4. Att använda npgsql 12 och ef 6 tillsammans - har någon lyckats med det?