我很难将存储过程从SQL Server转换为Oracle,以使我们的产品与之兼容.

我有一些查询,根据时间戳返回一些表的最新记录:

SQL Server:

SELECT TOP 1 *
FROM RACEWAY_INPUT_LABO
ORDER BY t_stamp DESC

=> That will returns me the most recent record

但是Oracle:

SELECT *
FROM raceway_input_labo 
WHERE  rownum <= 1
ORDER BY t_stamp DESC

=> That will returns me the oldest record (probably depending on the index), regardless the ORDER BY statement!

我以这种方式封装了Oracle查询,以满足我的需求:

SELECT * 
FROM 
    (SELECT *
     FROM raceway_input_labo 
     ORDER BY t_stamp DESC)
WHERE  rownum <= 1

而且很有效.但对我来说,这听起来像是一个可怕的黑客攻击,尤其是当我在相关的表中有很多记录时.

实现这一目标的最佳方式是什么?

推荐答案

where语句在beforeorder by之间执行.所以,你想要的查询是"take the first row and then order it byt_stampdesc".这不是你想要的.

子查询方法是在Oracle中执行此操作的合适方法.

如果想要在两台服务器上都能运行的版本,可以使用:

select ril.*
from (select ril.*, row_number() over (order by t_stamp desc) as seqnum
      from raceway_input_labo ril
     ) ril
where seqnum = 1

外部*将在最后一列返回"1".为了避免这种情况,您需要单独列出这些列.

Sql相关问答推荐

按postquist中的日期查询json列

表名数组

Select /过滤postgr中的树 struct

如何用3个(半)固定位置建模团队,并有效地搜索相同/不同的团队?

SQL查询:合并2个表

UPDATE查询中的乐观锁

我需要一个regexp_like来只验证字母D或T、数字和管道

在SELECT中将日期格式转换为双周时段

删除所有订单中可用的重复值

使用多个WITH子查询的替代方法

如何根据 Google BigQuery 中的特定列值连接一列的 N 行?

获取多个开始-结束时间戳集之间经过的时间

snowflake中的动态文件名生成

如何通过CROSS APPLY获取多级嵌套JSON属性的值?

更新表 A,然后将新值插入表 B(包含更新内容的历史日志(log))

Postgres:表的累积视图

多列上的 SQL UNIQUE 约束 - 它们的组合必须是唯一的还是至少其中之一?

为每组填写行以进行旋转

BigQuery - 将 TIMESTAMP 转换为 HH:MM:SS,然后识别 TIME_DIFF

SQL Server Where 条件