2010-12-01 4 views
1
ID FirstName LastName 
1 John  Smith  
2 Mike  Smith 
3 Ben   Bray 
4 John  Bray 
5 John  Smith 
6 Bill  Lynch 
7 Bill  Smith 

Hallo dort. Ich versuche, eine Subselect-Abfrage in Oracle mit MIN und MAX-Funktionen zu tun, aber ich kann nicht auf den richtigen Weg kommen. Jede Hilfe wäre willkommen.Oracle Sub Select Query qith Aggregation Funktion

Beispiel: Ich suche in der Tabelle für Carl Brayland. Wenn er nicht existiert i den ersten Namen, bevor Carl Brayland erhalten möchten, die mich ID geben 3 -> Ben Bray

example2: Ich bin auf der Suche in der Tabelle für Mike Mad Wenn er nicht existiert Ich möchte den Vornamen vor Mike Mad bekommen, der mir ID 6 geben wird -> Bill Lynch

Nachname sollte führen.

Antwort

0

Verwendung ROWNUM auf dem sortierten Satz (hier :p_lastname := 'Mad'; :p_firstname := 'Mike';):

SQL> WITH my_data AS (
    2  SELECT 1 ID, 'John' FirstName, 'Smith' LastName FROM DUAL 
    3  UNION ALL SELECT 2, 'Mike', 'Smith' FROM DUAL 
    4  UNION ALL SELECT 3, 'Ben' , 'Bray' FROM DUAL 
    5  UNION ALL SELECT 4, 'John', 'Bray' FROM DUAL 
    6  UNION ALL SELECT 5, 'John', 'Smith' FROM DUAL 
    7  UNION ALL SELECT 6, 'Bill', 'Lynch' FROM DUAL 
    8  UNION ALL SELECT 7, 'Bill', 'Smith' FROM DUAL 
    9 ) 
10 SELECT id, firstname, lastname 
11 FROM (SELECT id, firstname, lastname 
12    FROM my_data 
13   WHERE lastname <= :p_lastname 
14    AND (lastname < :p_lastname OR firstname <= :p_firstname) 
15   ORDER BY lastname DESC, firstname DESC) 
16 WHERE ROWNUM = 1; 

     ID FIRSTNAME LASTNAME 
---------- --------- -------- 
     6 Bill  Lynch 
+0

Hallo Vincent, vielen Dank für Ihre Antwort. Ich werde diese Abfrage sofort testen! – Michael

+0

Hallo Vincent, es funktioniert wie ein Zauber. Selbst mit 7 Millionen Datensätzen. Danke noch einmal! – Michael