我看不出有什么区别
select
ID,
TYPE,
XTIME,
first_value(XTIME) over (partition by TYPE order by XTIME)
from SERIES;
和:
select
ID,
TYPE,
XTIME,
first_value(XTIME) over (partition by TYPE order by XTIME)
from SERIES
order by TYPE, XTIME;
按/分区是否暗含查询的顺序?
答案 0 :(得分:1)
这两个查询之间的区别在于,第二个查询将依次由TYPE
和XTIME
升序排列,而第一个查询在理论上将具有随机顺序。
调用PARTITION BY
中使用的ORDER BY
和FIRST_VALUE
子句会影响该特定的分析功能,但 not 本身不会影响最终的结果集的顺序。
通常,如果要在SQL中对结果集进行排序,则需要使用ORDER BY
子句。如果您的两个查询 happen 现在都具有相同的排序,则只是偶然,并且不能保证。这怎么可能发生?好吧,如果Oracle正在迭代表的聚集索引,并且该顺序恰好与ORDER BY TYPE, XTIME
一致,那么即使使用ORDER BY
,甚至不,您也会看到该顺序。>
答案 1 :(得分:1)
不,不是。
仅当查询的结果集具有显式order by
子句时,才对其排序。否则结果集按任意顺序排列。通常,用于运行查询的基础算法确定结果集的顺序。
仅当对最外面的order by
使用select
子句时,才能依赖最终顺序。结果集的顺序相同只是一个巧合
我很好奇你为什么不简单地使用它?
min(xtime) over (partition by type)