| Предыдущая тема :: Следующая тема   | 
	 
	
	
		| Автор | 
		Сообщение | 
	 
	
		yaffil Профи
 
  Вступление в Клуб: 18.08.2011
  | 
		
			
				 Пт Июл 10, 2015 11:28   Аналитические ф-ции | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				Добрый день, как на sql (не PL+) написать запрос с аналитической ф-цией.
 
Есть такая, чтобы выбирала одно из значений таблицы по максимальному другому (тут дата)?
 
Например в таблице А 3 поля а1,а2,а3 в поле а3 дата, надо выбрать а2 но только ту, где а3 максимальна (последняя дата).
 
 
З.Ы. а аналитические для меня лес тёмный, никогда не работал с ними, а писать запрос  чтобы выбирал максимальную дату, а потом значение по ней думаю и глупо и в разы дольше делаться будет на больших объёмах. | 
			 
		  | 
	 
	
		  | 
	 
	
		Damir Участник - экстремал
 
  Вступление в Клуб: 29.03.2013
  | 
		
			
				 Пт Июл 10, 2015 12:13   Re: Аналитические ф-ции | 
				     | 
			 
			
				Полезность: 2 
  | 
			 
			
				 	  | yaffil пишет: | 	 		  
 
Например в таблице А 3 поля а1,а2,а3 в поле а3 дата, надо выбрать а2 но только ту, где а3 максимальна (последняя дата).
 
 | 	  
 
 
 	  | Код: | 	 		  select max(a.a2) keep( dense_rank=first order by a.a3 desc)
 
  from A | 	  
 
 
 	  | yaffil пишет: | 	 		  | З.Ы. а аналитические для меня лес тёмный... | 	  
 
гугл в помощь - статей на русском языке предостаточно. | 
			 
		  | 
	 
	
		  | 
	 
	
		yaffil Профи
 
  Вступление в Клуб: 18.08.2011
  | 
		
			
				 Пт Июл 10, 2015 12:39    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				first order by a.a3 desс
 
Специально так завернуто? Быстрее отработает чем LAST order by a.a3 ? | 
			 
		  | 
	 
	
		  | 
	 
	
		Damir Участник - экстремал
 
  Вступление в Клуб: 29.03.2013
  | 
		
			
				 Пт Июл 10, 2015 12:52    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | yaffil пишет: | 	 		  
 
...Быстрее отработает ... | 	  
 
уверяю - разницы не почувствуешь  
 
 
 	  | yaffil пишет: | 	 		  first order by a.a3 desс
 
Специально так завернуто? ...чем LAST order by a.a3 ? | 	  
 
 
главное, чтобы правильно было  
 
наводящий вопрос: при сортировке по a.a3 где будут записи со значением null (вначале, в конце, в середине)? | 
			 
		  | 
	 
	
		  | 
	 
	
		Damir Участник - экстремал
 
  Вступление в Клуб: 29.03.2013
  | 
		
			
				 Пт Июл 10, 2015 13:15    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | Damir пишет: | 	 		  | наводящий вопрос: при сортировке по a.a3 где будут записи со значением null (вначале, в конце, в середине)? | 	  
 
правильно будет так
 
 	  | Код: | 	 		  | max(a.a2) keep(dense_rank first order by a.a3 desc nulls last) val2 | 	  
 
или так
 
 	  | Код: | 	 		  | max(a.a2) keep(dense_rank last  order by a.a3 nulls first) val5       | 	                 
 
но сортировка  	  | Код: | 	 		  | order by .. nulls first | 	   лично меня вгоняет в ступор, а 'nulls last' забываю писать  
 
 
 
погоняй тестовый примерчик
 
 	  | Код: | 	 		  
 
select --a.*
 
--       , dense_rank() over(order by a.a3 desc nulls last) rnk1
 
--       , dense_rank() over(order by a.a3) rnk2
 
       
 
        max(a.a2) keep(dense_rank first order by a.a3 desc) val1
 
       , max(a.a2) keep(dense_rank first order by a.a3 desc nulls last) val2
 
       , max(a.a2) keep(dense_rank last  order by a.a3 ) val3
 
       , max(a.a2) keep(dense_rank last  order by a.a3 nulls last ) val4
 
       , max(a.a2) keep(dense_rank last  order by a.a3 nulls first) val5                     
 
       
 
from(
 
select 
 
  level as a1
 
  , mod(level, 10) a2
 
  , case 
 
    when mod(level, 10) = 8 then to_date(null)  
 
    else sysdate + level
 
   end as a3   
 
 from dual 
 
 connect by level <= 10
 
)a 
 
order by a.a3 desc 
 
--order by a.a3 desc nulls last
 
--order by a.a3 nulls last
 
 | 	 
  | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |