2014-10-30 46 views
0

我有要求,這是報告。SQL查詢在幾分鐘和幾天之間獲取數據

要求描述:

需要從一個表,該表是在30分鐘以上

嗯OPEN狀態數據,上述要求可以從

select * 
from xyz 
where status = 'OPEN' 
and last_update_date <= sysdate - (30/1440) --30 is minutes and its a parameter 

上述查詢獲得將從開始到系統日期 - (30/1440)提取所有處於OPEN狀態的數據。所以我想修改查詢來限制完整的數據,通過添加像DAY

這樣的另一個參數,例如,如果我給10天,它應該只在過去10天內獲取所有數據並且sysdate-30分鐘。 我們應該使用last_update_date列來限制一天。

如果我不給任何一天作爲輸入,如果應該從sysdate-30分鐘獲取所有記錄。 如果我不提供分鐘,它應該獲取OPEN狀態下的所有記錄。

問題是否足夠清楚?我的英語不好。

請給我建議的查詢..

+0

如果你會提供假設10天然後查詢需要返回最近10天的數據,如果你不提供任何一天,那麼它應該只顯示最後30分鐘的數據我是否正確? – 2014-10-30 09:32:58

+0

正確...如果我們不提供這兩個,那麼只需返回所有記錄在OPEN狀態.. – 2014-10-30 09:36:06

+0

你會提供幾天的天數,或者你會提供日期upto重新分配必須disply – 2014-10-30 09:42:38

回答

2

只需使用或您檢查參數爲NULL的表達式:

select * 
from xyz 
where status = 'OPEN' 
and (last_update_date <= sysdate - (:minutes/1440) or :minutes is null) 
and (trunc(last_update_date) >= trunc(sysdate - :days) or :days is null) 
+0

謝謝Thorsten :) – 2014-10-31 11:25:59

1

此查詢未測試。 請告訴我這個查詢返回了我錯過的任何錯誤或遺漏。

select 
    * 
from 
    xyz 
where 
    status = 'OPEN' 
    and 
    last_update_date <= CASE WHEN @No_Of_Days <> 0 THEN sysdate - @No_Of_Days ELSE NULL END 
    and  
    minutes(last_update_date) <= SYSDATE - 30/1440 
+0

@ user3211648如果在查詢中發生任何問題,請回復 – 2014-10-30 11:24:27

+0

Hardik ..實際上我正在使用Oracle DB。 DATEADD()似乎是SQL服務器..你可以請求驗證一次 – 2014-10-30 11:47:00

+0

@ user3211648請檢查我編輯過的解決方案 – 2014-10-30 11:54:23

相關問題