Sql oracle数据库中的查询限制

Sql oracle数据库中的查询限制,sql,oracle,Sql,Oracle,我试图创建一个有一定限制的查询 从报警中选择*,其中OBJECT_ID=0且TIMESTAMPFETCH FIRST仅在Oracle 12c之后可用 对于rownum方法,使用包含order by的子查询,然后限制封闭查询中的行: SELECT * FROM ( SELECT * FROM ALARMS WHERE OBJECT_ID=0 AND TIMESTAMP<=152567750417 ORDER BY TIMESTAMP DESC ) dt WHERE ROWNU

我试图创建一个有一定限制的查询

从报警中选择*,其中OBJECT_ID=0且TIMESTAMPFETCH FIRST仅在Oracle 12c之后可用

对于rownum方法,使用包含order by的子查询,然后限制封闭查询中的行:

SELECT * FROM (
    SELECT * FROM ALARMS WHERE OBJECT_ID=0 AND TIMESTAMP<=152567750417
    ORDER BY TIMESTAMP DESC
) dt
WHERE ROWNUM<=51 
FETCH FIRST仅在Oracle 12c之后可用

对于rownum方法,使用包含order by的子查询,然后限制封闭查询中的行:

SELECT * FROM (
    SELECT * FROM ALARMS WHERE OBJECT_ID=0 AND TIMESTAMP<=152567750417
    ORDER BY TIMESTAMP DESC
) dt
WHERE ROWNUM<=51 

你只在最后错过了。如果我没记错的话,这个语法是从12c R1开始使用的。您使用哪个Oracle版本

SELECT * FROM ALARMS WHERE OBJECT_ID=0 AND TIMESTAMP<=1525677504171 ORDER BY TIMESTAMP DESC FETCH FIRST 51 ROWS ONLY
)

编辑:

既然你的版本是11g,那么试着使用这样的语法,我希望它能工作

SELECT * 
FROM (
    SELECT a.*,ROW_NUMBER() OVER(ORDER BY TIMESTAMP DESC) rcnt 
    FROM ALARMS A WHERE OBJECT_ID=0 AND TIMESTAMP<=1525677504171) src  
WHERE src.rcnt <= 51
ORDER BY src.TIMESTAMP desc;

你只在最后错过了。如果我没记错的话,这个语法是从12c R1开始使用的。您使用哪个Oracle版本

SELECT * FROM ALARMS WHERE OBJECT_ID=0 AND TIMESTAMP<=1525677504171 ORDER BY TIMESTAMP DESC FETCH FIRST 51 ROWS ONLY
)

编辑:

既然你的版本是11g,那么试着使用这样的语法,我希望它能工作

SELECT * 
FROM (
    SELECT a.*,ROW_NUMBER() OVER(ORDER BY TIMESTAMP DESC) rcnt 
    FROM ALARMS A WHERE OBJECT_ID=0 AND TIMESTAMP<=1525677504171) src  
WHERE src.rcnt <= 51
ORDER BY src.TIMESTAMP desc;

您不会在语句中仅使用FETCH FIRST 51 ROWS,而是在语句中仅使用FETCH FIRST 51 ROWS,而是使用FETCH FIRST 51 ROWS RELEVANT doc来支持这一点:我正在使用Oracle 11GREEVANT doc来支持这一点:我正在使用Oracle 11gIt,但dt意味着什么?这是派生表的别名。我不确定这在Oracle中是否必要,因为我正在使用多个数据库;在某些情况下,它是强制性的。它起作用,但dt是什么意思?这是派生表的别名。我不确定这在Oracle中是否必要,因为我正在使用多个数据库;在其中一些国家,这是强制性的。