首页 > 解决方案 > 在带有时间戳的表中查找最后 2 个版本

问题描述

我在 oracle 中有一个名为 received 的表,其中包含以下列:名称(varchar2)版本(varchar2)esptime(时间戳)

表格不断填写,一段时间后版本会增加。但是一个版本可能有 100 行,然后一个月后我可以有一个新版本的额外 1000 行,依此类推。现在我想创建一个查询,列出我最后的 2 个版本。

我正在尝试使用排名高于功能使其工作。这是我到目前为止所拥有的,但它没有显示最后两个版本:

select '''' || version || '''' as version from (
select version, esptime, rank() over (partition by version order by esptime desc)
from (select distinct version,esptime from recieved)
order by esptime desc)
where ROWNUM <3;

谢谢您的帮助,

标签: sqloracletimestampranking

解决方案


嗯。. . 假设版本按其命名排序:

select r.*
from (select r.*, dense_rank() over (order by version desc) as seqnum
      from received r
     ) r
where seqnum <= 2;

如果所有版本都有相同的时间,你可以esptime在上面使用。如果版本有不同的时间并且名称不能用于排序,那么最简单的方法可能是:

select r.*
from (select r.*,
             dense_rank() over (order by min_version_esptime desc, version) as seqnum
      from (select r.*,
                   min(esptime) over (partition by version) as min_version_esptime
            from received r
           ) r
     ) r
where seqnum <= 2;

推荐阅读