如何在不使用RowID的情况下从Oracle获取最后一条记录?

如何在不使用RowID的情况下从Oracle获取最后一条记录?,oracle,Oracle,我有一个列表,如下所示: Time_Minutes 6.950 6.967 6.083 我在Oracle中编写了两页大的查询后得到了这些值。从这里,我想要最后一张唱片,是6.083 但问题是,我不能使用ROWID,因为我在大查询中使用orderby和distinct。还有什么其他方法 此外,我不能使用逻辑顺序。尝试分析功能 SELECT * FROM (SELECT a, rank() over (order by a) rk, co

我有一个列表,如下所示:

Time_Minutes
6.950
6.967
6.083
我在Oracle中编写了两页大的查询后得到了这些值。从这里,我想要最后一张唱片,是6.083

但问题是,我不能使用ROWID,因为我在大查询中使用orderby和distinct。还有什么其他方法


此外,我不能使用逻辑顺序。

尝试分析功能

SELECT * FROM 
    (SELECT a,
            rank() over (order by a) rk, 
            count(*) over() cnt
     from tablename
    ) where rk = ct

试试分析功能

SELECT * FROM 
    (SELECT a,
            rank() over (order by a) rk, 
            count(*) over() cnt
     from tablename
    ) where rk = ct

试试分析功能

SELECT * FROM 
    (SELECT a,
            rank() over (order by a) rk, 
            count(*) over() cnt
     from tablename
    ) where rk = ct

试试分析功能

SELECT * FROM 
    (SELECT a,
            rank() over (order by a) rk, 
            count(*) over() cnt
     from tablename
    ) where rk = ct
“最后一条记录”是指“最近插入的记录”吗

首先,请忘记ROWID对于获得这个结果是有用的这一概念。在将行插入表时依赖rowid增加会带来麻烦。可以删除行,并在旧行所在的位置插入新行。段可以扩展和分配比以前的区段具有“更低”ROWID值的区段。分区、行移动、任何数量的其他特性都意味着rowid不一定会随着新行的插入而增加

如果信息对您很重要,则需要另一列来告诉您插入行的顺序。就个人而言,我会有一个日期或时间戳,可以自动填充一个触发器。您还可以使用从递增序列填充的ID列

我能想到的唯一狡猾的选择是使用flashback versions查询来确定哪一行是最新的,但这将变得相当复杂。

所说的“最后一条记录”是指“最近插入的记录”吗

首先,请忘记ROWID对于获得这个结果是有用的这一概念。在将行插入表时依赖rowid增加会带来麻烦。可以删除行,并在旧行所在的位置插入新行。段可以扩展和分配比以前的区段具有“更低”ROWID值的区段。分区、行移动、任何数量的其他特性都意味着rowid不一定会随着新行的插入而增加

如果信息对您很重要,则需要另一列来告诉您插入行的顺序。就个人而言,我会有一个日期或时间戳,可以自动填充一个触发器。您还可以使用从递增序列填充的ID列

我能想到的唯一狡猾的选择是使用flashback versions查询来确定哪一行是最新的,但这将变得相当复杂。

所说的“最后一条记录”是指“最近插入的记录”吗

首先,请忘记ROWID对于获得这个结果是有用的这一概念。在将行插入表时依赖rowid增加会带来麻烦。可以删除行,并在旧行所在的位置插入新行。段可以扩展和分配比以前的区段具有“更低”ROWID值的区段。分区、行移动、任何数量的其他特性都意味着rowid不一定会随着新行的插入而增加

如果信息对您很重要,则需要另一列来告诉您插入行的顺序。就个人而言,我会有一个日期或时间戳,可以自动填充一个触发器。您还可以使用从递增序列填充的ID列

我能想到的唯一狡猾的选择是使用flashback versions查询来确定哪一行是最新的,但这将变得相当复杂。

所说的“最后一条记录”是指“最近插入的记录”吗

首先,请忘记ROWID对于获得这个结果是有用的这一概念。在将行插入表时依赖rowid增加会带来麻烦。可以删除行,并在旧行所在的位置插入新行。段可以扩展和分配比以前的区段具有“更低”ROWID值的区段。分区、行移动、任何数量的其他特性都意味着rowid不一定会随着新行的插入而增加

如果信息对您很重要,则需要另一列来告诉您插入行的顺序。就个人而言,我会有一个日期或时间戳,可以自动填充一个触发器。您还可以使用从递增序列填充的ID列


我能想到的唯一狡猾的选择是使用flashback versions查询来确定哪一行是最新的,但这将变得相当复杂。

“first”和“last”是没有意义的概念,没有使用
order by
。您说您在生成这些结果的查询中使用了一个
orderby
。是否要使用该查询的
orderby
来确定“first”和“last”?您可以使用
row_number()over(按b的顺序划分)
来生成一个自定义行号,以后可以使用它来仅选择某个窗口。请向我们提供更多详细信息。如果该信息未存储在表中,则没有“最后”行。如果插入行的顺序很重要,则需要将其记录为表中的一列。Oracle
SEQUENCE
对象可用于生成递增整数值,而每行插入前的
触发器可从序列中获取一个值并将该值分配给列。(您不使用Oracle
ROWID是正确的,这不是确定插入顺序的可靠方法。)“first”和“last”如果不使用
order by
,则是毫无意义的概念。您说您在生成这些结果的查询中使用了一个
orderby
。是否要使用该查询的
orderby
来确定“first”和“last”?您可以使用
row_number()over(按b的顺序划分)
来生成一个自定义行号,以后可以使用该行号仅选择一个ce