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

嗨那里。我试图在oracle中使用MIN和MAX函数进行子查询查询,但我似乎无法找到正确的方向。任何帮助,将不胜感激。Oracle sub select查询qith聚合函数

例如:我正在寻找Carl Brayland的表格。 如果他不存在,我想卡尔Brayland之前的第一个名字,这将给我的ID 3 - >奔布雷

例2:我期待在表中麦克疯 如果他不存在我想在迈克疯狂之前得到第一个名字,这会给我ID 6 - >比尔林奇

姓应该是领先的。

回答

0

使用ROWNUM的有序集合(这里: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

嗨文森特,感谢您的回复。我要马上测试这个查询! – Michael 2010-12-01 12:13:11