2016-09-24 1 views
-1

Я хочу выбрать первый и последний результат из подзапроса в оракуле. Я не могу использовать «rownum», так как я использую «order by», который полностью изменяет последовательность «rownum».
PLS предлагает некоторые решения. thanx fr help.выбор первого результата из вывода подзапроса

ответ

0

Вы не можете использовать «rownum», потому что хотите как первое, так и последнее значение. В противном случае вы могли бы использовать rownum, поместив свой код в подзапрос и выбрав его и отфильтровывая rownum во внешнем запросе. Как бы то ни было, вам нужно использовать аналитическую функцию ROW_NUMBER() и такие (как с порядком ... и с порядком ... по убыванию, так что вы можете получить как первый, так и последний результат в одном внешнем запросе.

Если связь возможна, вы можете предпочесть DENSE_RANK, чтобы все строки были привязаны для первого (или для последнего), вместо этого ROW_NUMBER() вернет «одну из» строк, привязанных к первой (или последней), какая из них, в частности, , является случайным

Если вы хотите увидеть пример, предоставлять данные выборки для вашей проблемы

+0

Да, я использовал ROW_NUMBER() с OVER, и это сработало. Thnx – user4036695

0

Используйте keep, если у вас есть запрос агрегации это то, что он предназначен для это выглядит примерно так....:

select x, 
     max(outcome) keep (dense_rank first order by datetime asc) as first_outcome, 
     max(outcome) keep (dense_rank first order by datetime desc) as last_outcome, 
from t 
group by x; 

Используйте first_value() и last_value(), если нет агрегации:

select t.*, 
     first_value(outcome) over (partition by x order by datetime) as first_outcome, 
     last_value(outcome) over (partition by x order by datetime) as last_outcome 
from t; 
0

Я решил это с помощью функции ROW_NUMBER() с более чем (заказ ..).