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

こんにちは。 MINとMAX関数を使ってoracleでsubselectクエリを実行しようとしていますが、正しい軌道に乗ることができません。どんな助けもありがとう。Oracleサブ選択クエリqith集計関数

例:私はCarl Braylandのテーブルを見ています。 彼が存在しない場合、私はID3を与えるだろう - カールBraylandの前にファーストネームを取得したい - >ベンブレイ

例2:私はマイクマッドのテーブルを探しています 彼が存在しなければ私はID 6を与えるマイクマッドの前にファーストネームを取得したい - >ビルリンチ

姓が先行する必要があります。 (ここでは:p_lastname := 'Mad'; :p_firstname := 'Mike';)ソートセットに

答えて

0

使用ROWNUM:

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

こんにちはヴィンセント、お返事に感謝。私はすぐにこのクエリをテストするつもりです! – Michael

+0

こんにちはヴィンセント、それは魅力のように動作します。 7百万のレコードでさえ。再度、感謝します! – Michael