Sql oracle数据库中的“缺少右括号”错误

Sql oracle数据库中的“缺少右括号”错误,sql,oracle,Sql,Oracle,我想从一个名为V_DISPOSITIVO的表中查询最后x分钟的数据 例如,我有以下查询,x=10分钟: SELECT FECHA FROM V_DISPOSITIVO WHERE FECHA > (select FECHA - interval '10' minute from V_DISPOSITIVO where (rownum = 1) order by FECHA de

我想从一个名为V_DISPOSITIVO的表中查询最后x分钟的数据 例如,我有以下查询,x=10分钟:

SELECT FECHA
  FROM V_DISPOSITIVO
 WHERE FECHA > (select FECHA  - interval '10' minute 
                  from V_DISPOSITIVO  
                 where (rownum = 1) 
              order by FECHA desc)
SELECT fecha
FROM v_dispositivo
WHERE fecha > (SELECT max(FECHA)  - interval '10' minute 
               FROM v_dispositivo);
它失败了,但是输出没有给出它失败的确切原因。它只是说

错误代码907,SQL状态42000:ORA-00907:缺少右括号


我做错了什么?

我假设fecha是一个datetime列。如果是,请尝试以下方法

SELECT FECHA
FROM V_DISPOSITIVO
WHERE FECHA > sysdate - 10/(60*24)

我需要保存的最后一行的日期可能是2年前,然后从中减去x分钟

关系数据库中没有最后一行这样的东西。如果您指的是日期或时间戳列中的最新值,只需使用max并减去10分钟:

SELECT FECHA
  FROM V_DISPOSITIVO
 WHERE FECHA > (select FECHA  - interval '10' minute 
                  from V_DISPOSITIVO  
                 where (rownum = 1) 
              order by FECHA desc)
SELECT fecha
FROM v_dispositivo
WHERE fecha > (SELECT max(FECHA)  - interval '10' minute 
               FROM v_dispositivo);

您可以使用分析函数在单个查询中执行此操作,并消除子查询:

SELECT FECHA
FROM   (
  SELECT FECHA,
         MAX( FECHA ) OVER () AS MAX_FECHA
  FROM   V_DISPOSITIVO
)
WHERE  FECHA > MAX_FECHA - INTERVAL '10' MINUTE;

您的代码中有些东西没有意义,间隔10分钟的行应该是注释吗?@JacobH,不应该是。interval“10”minute是用于编写间隔值的SQL标准语法您的意思是:其中FECHA>sysdate-interval“10”minute?somedate-interval“10”minute是从日期中减去时间的有效oracle操作。例如,从V_DISPOSITIVO选择FECHA-间隔“10”分钟,其中rownum=1 FECHA desc的订单返回2017-05-07 23:50:00.000Hi。谢谢你的回复。但这不是我需要的。我需要保存的最后一行的日期,它可能是2年前,然后从中减去x分钟。所以基本上你想要最新的记录和任何比它早10分钟的旧记录?是的,这是正确的。我相信在他的原始代码中,如果将间隔“10”分钟移到最后一个括号后的末尾,则会产生相同的结果,但您的解决方案更简洁。我也不知道为什么一开始就出现了这个错误:谢谢。这是解决我问题的正确方法。祝您有个美好的一天。