2017-05-08 244 views
0

我想从一个名为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) 

它失败了,但输出并没有给我它失败的确切原因。它只是说

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

我在做什么错?

+0

你的代码中的东西没有任何意义,是 - 间隔'10'分钟线应该是一个评论? –

+0

@JacobH,不,它不应该。 – Rahul

+0

@JacobH。 'interval'10'minute'是写入区间值的SQL标准语法 –

回答

1

我需要保存的最后一排的日期(也可能是2年前),并从随后。减去x分钟。

没有关系数据库中的“最后一行”。如果你的意思是在一个日期或时间戳列“最新”的值,只需使用max()和。减去10分:

SELECT fecha 
FROM v_dispositivo 
WHERE fecha > (SELECT max(FECHA) - interval '10' minute 
       FROM v_dispositivo); 
+0

是的,这是正确的。我相信他的原始代码,如果' - interval'10'minute'在最后一个括号之后移动到最后(但是您的解决方案是“更清晰”),它会得到相同的结果。然后,我不知道为什么错误提出了第一个地方:) – Dessma

+0

谢谢。这是我的问题的正确解决方案。祝你今天愉快。 –

0

我认为“fecha”是一个日期时间列。如果是这样,请尝试以下,而不是

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

WHERE FECHA > sysdate - interval '10' minute 
+0

嗨。感谢您的回复。但这不是我所需要的。我需要保存最后一行的日期(可能是2年前),然后从中减去x分钟。 –

+0

所以基本上你想要最近的记录和任何不到10分钟的旧记录? – Dessma

0

您可以使用分析功能(和消除子查询做一个单一查询):

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