2016-09-24 79 views
-1

的输出第一个结果我想从Oracle中的子查询中选择第一个和最后的结果。 我不能使用“rownum”,因为我使用的“order by”完全改变了“rownum”的顺序。
请提出一些解决方案。 thanx fr的帮助。选择从一个子查询

回答

0

你不能使用“rownum”,因为你需要第一个和最后一个值 - 否则你可以使用rownum,把你的代码放到子查询中,并从中选择并在外部查询中通过rownum进行过滤。实际上,您需要使用ROW_NUMBER()分析函数等(均按顺序排列......并按顺序排列...... desc,因此您可以在单个外部查询中同时获得第一个和最后一个结果。)

如果关系是可能的,你可能更喜欢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()函数与OVER(ORDER BY ..)。