2013-03-14 2 views
1

Я пытаюсь запустить запрос,Ошибка при использовании агрегатной функции MAX() оракул

select * from OS_Historystep where step_name = '011' and finish_date = max(finish_date) ; 

Но я получаю сообщение об ошибке, что

ORA-00934: group function is not allowed here 
00934. 00000 - "group function is not allowed here" 
*Cause:  
*Action: 
Error at Line: 12 Column: 72 

, что я делаю не так?

Спасибо

ответ

3

вы не можете использовать агрегат в пункте where. Кроме того, вы не можете смешивать необобщенные данные и агрегированные данные из одного столбца в одном выбрать. вы 'необходимо будет использовать подзапрос:

select * 
from OS_Historystep hs1 
where step_name = '011' 
and finish_date = (select max(finish_date) 
        from OS_Historystep hs2 
        where hs2.step_name = hs1.step_name); 
2

Вы не можете ссылаться на подобный агрегат. вы должны либо поставить вспомогательный запрос вверх, как показано ниже (при условии, что вы хотели в max(finish_date) означает максимальную дату окончания на этапе 011, а не максимальная дата окончания во всей таблице (которая не может вернуть ни одной строки):

select * 
    from OS_Historystep 
where step_name = '011' 
    and finish_date = (select max(finish_date) 
         from OS_Historystep 
         where step_name = '011'); 

или использовать аналитическую функцию

select * 
    from (select s.*, rank() over (partition by step_name order by finish_date desc) rnk 
      from OS_Historystep s 
     where step_name = '011') 
where rnk = 1; 
Смежные вопросы