Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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
|
|
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|