Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Używanie funkcji agregacji do filtrowania rekordu na podstawie znacznika czasu MIN

Istnieje kilka sposobów na uzyskanie najwcześniejszego rekordu i uniknięcie konieczności dwukrotnego wpisywania tych samych kryteriów.

Korzystanie z funkcji FETCH FIRST ROWS (dostępne 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;

Korzystanie z CTE (klauzula Z)

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

Korzystanie z funkcji 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;

(Nawiasem mówiąc, zmieniłem kryteria dołączania we wszystkich tych zapytaniach. Po prostu wydaje się bardzo mało prawdopodobne, że chcesz dołączyć na abc_customer_details.id = abc_customers.customer_id .)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. utrzymywanie jednego połączenia z DB lub otwieranie zamykania na żądanie

  2. Rejestruj komunikaty o błędach w procedurze składowanej Oracle

  3. lokalne typy kolekcji nie są dozwolone w instrukcjach SQL

  4. Oracle uruchamia ograniczenie sprawdzania co miesiąc

  5. Problem z Django inspectdb przy użyciu bazy danych Oracle