[Oracle] Ältesten / Größten Datensatz einer Datenmenge ermitteln mit analytischem SQL

Thomas Darimont

Erfahrenes Mitglied
Hallo,

anhand dieser Problemstellung: http://www.tutorials.de/relationale...is-auf-aeltesten-nach-bedingung-loeschen.html
hier mal ein Beispiel wie man in einer Datenmenge den ältesten (tollsten, schönsten, kleinsten, wertvollsten - je nach ORDER BY Kriterium in der RANK-Funktion) Eintrag einer Gruppe ermitteln kann.

Dabei ist ID die eindeutige Kennung eines Datensatzes, crit ist das Gruppierungs Kriterium (der Einträge die zusammengehören) und age ist in diesem Fall das "alter" des Datensatzes.
SQL:
WITH
DATA AS (
  SELECT 1 as id, 1 as crit, 10 as age FROM dual
  UNION 
  SELECT 2 AS ID, 1 AS crit, 30 AS age FROM dual
  UNION
  SELECT 3 AS ID, 1 AS crit, 20 AS age FROM dual
  UNION
  SELECT 4 AS ID, 2 AS crit, 10 AS age FROM dual
  UNION
  SELECT 5 AS ID, 2 AS crit, 15 AS age FROM dual
  UNION
  SELECT 6 AS ID, 3 AS crit, 40 AS age FROM dual
  UNION
  SELECT 7 as id, 4 AS crit, 50 as age FROM dual
)
, RANKED_DATA AS (
SELECT ID, crit, age, rank() OVER (PARTITION BY crit ORDER BY age DESC) as rnk FROM DATA 
)
select * from ranked_data where rnk = 1

Ausgabe:
Code:
ID CRIT AGE RNK
-- ---- --- ---
 2    1  30   1 
 5    2  15   1 
 6    3  40   1 
 7    4  50   1

Gruß Tom
 

Neue Beiträge

Zurück