sql - Order By 子句每次查询时返回不同的结果
问题描述
我有一个表 Exc,其中包含以下列。
TIME DATE
CODE CHAR(9 BYTE)
VALUE NUMBER(5,2)
表中没有序列号或主键。由于表中没有唯一 ID,因此我编写了以下查询来为每一行生成唯一编号,该编号用于将每一行标识为唯一。
select time, code, value
from (select time, code, value, ROW_NUMBER() over (order by time) R from EXC) where R > :x;
x - 保存最后一个最大行号的变量。
但是当我第二次运行上述查询时,按索引时间的顺序对于具有相同时间的行以不同的顺序返回。我需要从 Oracle 查询中获得一致的顺序。
请在这个问题上帮助我。
解决方案
相同时间的行的不同顺序
如果time
不是唯一的,那么您需要决定如何打破关系。我们看不到您的数据,但这至少应该是一致的:
select time,code,value, ROW_NUMBER() over (order by time, code, value) R
from EXC;
R
您在内部查询中生成值但在外部查询中没有使用它似乎很奇怪。如果您只想使用它来订购结果,那么您可以这样做:
select time, code, value
from (
select time, code, value, ROW_NUMBER() over (order by time, code, value) R
from EXC
)
order by r;
要不就:
select time, code, value
from EXC
order by time, code, value;
如果您确实也想查看该R
值,则不需要子查询:
select time, code, value, ROW_NUMBER() over (order by time, code, value) R
from EXC
order by r;
甚至使用 Oracle-onlyrownum
伪列:
select time, code, value, rownum R
from EXC
order by order by time, code, value;
下次我需要 R 值来获取数据,方法是使用 ...
您可以将其与过滤器结合使用,就像您展示的那样:
select time, code, value
from (
select time, code, value, ROW_NUMBER() over (order by time, code, value) R
from EXC
)
where r > :x
order by r;
但是,如果您主要使用它来查找最近的数据,则最好记录时间并直接对其进行过滤:
select time, code, value
from EXC
where time > :x
order by ...
当然要注意如何维护该变量。
推荐阅读
- bash - 检测mac上是否安装了coreutils
- c# - 如何评估 JSON 文件中的日期时间表达式?
- python - 多个 NFC PN532 使用 I2C 接口与 Raspberry
- r - for循环查找实际值与下一个值之和大于x的位置
- python - 为什么 Python 会有这样的行为?初学者尝试编写刽子手游戏
- sql-server - 在where条件下执行选择查询
- swift - SCNPhysicsVehicle SCNPhysicsVehicleWheel Road 问题
- .htaccess - 301重定向多级目录
- c++ - Function pointer assignment cause error after creating DLL
- project-reactor - 为什么 Thread.sleep() 会触发订阅 Flux.interval()?