Ну, это известный вопрос. Рассмотрим ниже
EmployeeID EmployeeName Department Salary
----------- --------------- --------------- ---------
1 T Cook Finance 40000.00
2 D Michael Finance 25000.00
3 A Smith Finance 25000.00
4 D Adams Finance 15000.00
5 M Williams IT 80000.00
6 D Jones IT 40000.00
7 J Miller IT 50000.00
8 L Lewis IT 50000.00
9 A Anderson Back-Office 25000.00
10 S Martin Back-Office 15000.00
11 J Garcia Back-Office 15000.00
12 T Clerk Back-Office 10000.00
Нам нужно узнать вторую по величине зарплату
With Cte As
(
Select
level
,Department
,Max(Salary)
From plc2_employees
Where level = 2
Connect By Prior (Salary) > Salary)
Group By level,Department
)
Select
Employeeid
,EmployeeName
,Department
,Salary
From plc2_employees e1
Inner Join Cte e2 On e1.Department = e2.Department
Order By
e1.Department
, e1.Salary desc
,e1.EmployeeID
как-то не работает... Я не получаю правильный результат. Может ли кто-нибудь помочь мне.
Connect By Prior (Salary) > Salary
приводит к тому, что каждая зарплата присоединяется к каждой зарплате ниже нее. - person Allan   schedule 02.11.2011n*(n-1)/2
записей, если ни одна из них не будет равна) записей, чтобы найти одну запись, которую вы ищете. Это невероятно неэффективно, особенно когда есть известное решение, в котором используется функция, лучше подходящая для задачи (аналитические запросы). - person Allan   schedule 02.11.2011