Zitat Zitat von Irian Beitrag anzeigen
Code (SQL):
 
SELECT * FROM page p WHERE (SELECT count(*) FROM page q WHERE q.page_id < p.page_id) = 4;
 
Ist das nicht O(N^2)?

Ich hätte noch diese Lösung anzubieten:

Code (SQL):
 
SELECT col1, col2, ... 
FROM (SELECT col1, col2, ..., ROWNUM rn 
      FROM (SELECT * 
            FROM tab 
            ORDER BY coln DESC) 
      WHERE ROWNUM < 6 )
WHERE  rn = 5;
 


Das sollte für große Datenbanken schneller sein, wenn ich richtig liege, ist aber weniger elegant, da die Kolumnen explizit angegeben werden müssen. Was es macht ist folgendes:

1. Wähle alles aus tab und sortiere absteigend nach coln.
2. Wähle die ersten 5 Reihen.
3. Wähle die 5. Reihe.