2017-05-08 215 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;