从子查询的输出中选择第一个结果

selecting first result from output of a subquery

我想 select 来自 oracle 子查询的第一个和最后一个结果。 我不能使用 "rownum" 因为我正在使用 "order by" 这完全改变了 "rownum".
的顺序 请提出一些解决方案。 谢谢你的帮助。

您不能使用 "rownum" 因为您需要第一个值和最后一个值 - 否则您可以通过将代码放在子查询中并从中选择并在外部查询中按 rownum 过滤来使用 rownum .实际上,您需要使用 ROW_NUMBER() 分析函数等(同时使用 order by ... 和 order by ... desc,因此您可以在一个单一结果中同时获得第一个和最后一个结果外部查询。

如果可以并列,您可能希望 DENSE_RANK 让所有行排在第一位(或最后一位);相反,ROW_NUMBER() 将 return "one of" 排在第一行(或最后一行);具体来说,哪一个是随机的。

如果您想查看示例,请为您的问题提供示例数据。

如果您有聚合查询,请使用 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;

我通过使用带有 OVER(order by..) 的 ROW_NUMBER() 函数解决了这个问题。