Я хочу выбрать первый и последний результат из подзапроса в оракуле. Я не могу использовать «rownum», так как я использую «order by», который полностью изменяет последовательность «rownum».
PLS предлагает некоторые решения. thanx fr help.выбор первого результата из вывода подзапроса
ответ
Вы не можете использовать «rownum», потому что хотите как первое, так и последнее значение. В противном случае вы могли бы использовать rownum, поместив свой код в подзапрос и выбрав его и отфильтровывая rownum во внешнем запросе. Как бы то ни было, вам нужно использовать аналитическую функцию ROW_NUMBER() и такие (как с порядком ... и с порядком ... по убыванию, так что вы можете получить как первый, так и последний результат в одном внешнем запросе.
Если связь возможна, вы можете предпочесть DENSE_RANK, чтобы все строки были привязаны для первого (или для последнего), вместо этого ROW_NUMBER() вернет «одну из» строк, привязанных к первой (или последней), какая из них, в частности, , является случайным
Если вы хотите увидеть пример, предоставлять данные выборки для вашей проблемы
Используйте 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;
Я решил это с помощью функции ROW_NUMBER() с более чем (заказ ..).
Да, я использовал ROW_NUMBER() с OVER, и это сработало. Thnx – user4036695