2010-12-01 55 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 

Bonjour à tous. J'essaie de faire une requête sous-sélection dans Oracle avec les fonctions MIN et MAX, mais je n'arrive pas à me mettre sur la bonne voie. Toute aide serait appréciée. Exemple: Je regarde dans le tableau pour Carl Brayland. S'il n'existe pas que je veux obtenir le premier nom avant Carl Brayland qui me donnera ID 3 -> Ben BrayRequête de sous-sélection Oracle avec fonction d'agrégation

Example2: Je suis à la recherche dans le tableau pour Mike Mad S'il n'existe pas Je veux obtenir le prénom avant Mike Mad qui me donnera l'ID 6 -> Bill Lynch

Le nom de famille devrait être en tête.

Répondre

0

utilisation ROWNUM sur l'ensemble trié (ici :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

Salut Vincent, merci pour votre réponse. Je vais tester cette requête tout de suite! – Michael

+0

Bonjour Vincent, ça fonctionne comme un charme. Même avec 7 millions d'enregistrements. Merci encore! – Michael