sql - 在带有时间戳的表中查找最后 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;
谢谢您的帮助,
解决方案
嗯。. . 假设版本按其命名排序:
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;
推荐阅读
- python - TensorFlow 模型损失的近似周期性跳跃
- javascript - Babel 输出中这些注释的目的是什么?
- bash - 如何通过 BASH SCRIPT 中的用户定义变量更改 IP 地址?
- elasticsearch - 基于由另一个参数链接的一系列日志中的一个参数在 Kibana 中进行过滤
- tensorflow - 在 Tensorflow v2 中替换 tf.contrib.predictor.from_saved_model
- python - connect() 到 unix:/var/uwsgi/salesproject.sock 失败(111:连接被拒绝)
- android - 当布局通常为空且仅以编程方式填充时,我可以显示示例视图吗?
- php - 在 WooCommerce 中获取产品类别和标签术语作为元关键字
- html - `display: block;` 在 `pre` 标签内的 `code` 标签内会创建不需要的新行,并且滚动时样式不会应用到全长
- mysql - MySQL 从存储过程中检索 last_insert_id