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.
Ausgabe:
Gruß Tom
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