2012-04-27 90 views
0

我有一個屏幕創建來顯示查詢中的數據。該查詢應該收集來自過程的材料的日常生產。查詢低於:查詢不收集所有數據

Select SUM(ltv.val) "CE" FROM LADLE_TAP_VALUE ltv, LADLE_TAP_ID lti where ltv.id=108 AND ltv.ladletapid =lti.ladletapid and lti.tapid IN (Select ti.TapID FROM tap_index ti WHERE ti.tapno like 'CE%' AND ti.starttime>=to_date('20120426', 'yyyymmdd hh24:mi:ss') and ti.endtime<=to_date('20120427 00:00:00', 'yyyymmdd hh24:mi:ss')); 

,我現在面臨的問題是,偶爾會的開始時間接近一天結束和結束時間是在第一個小時,第二天的。 我不知道如何使用我的查詢的時間處理部分進行調整。這是一個問題,因爲我每天都從我的顯示器上遺漏了應該在那裏的產品。

tap_index table 
tapid tapno plant taphole drytap status startime endtime slagstart readytime 
21437 CN121348 1 1 1 0 26-APR-12 06:00:26 26-APR-12 07:42:41 26-APR-12 06:56:34 26-APR-12 06:00:00 
21436 CE121347 1 2 1 0 26-APR-12 03:21:10 26-APR-12 05:40:48 26-APR-12 04:39:27 26-APR-12 03:21:00 
21435 CN121346 1 1 1 0 26-APR-12 01:48:07 26-APR-12 03:01:23 26-APR-12 02:27:34 26-APR-12 01:48:00 
21434 CE121345 1 2 1 0 25-APR-12 23:27:23 26-APR-12 01:28:08 26-APR-12 00:44:09 25-APR-12 23:27:00 
21433 CN121344 1 1 1 0 25-APR-12 21:18:24 25-APR-12 23:07:17 25-APR-12 22:31:04 25-APR-12 21:18:00 
21432 CE121343 1 2 1 0 25-APR-12 19:55:08 25-APR-12 20:58:59 25-APR-12 20:22:39 25-APR-12 19:55:00 
21431 CN121342 1 1 1 0 25-APR-12 18:09:28 25-21422 CE121333 1 2 1 0 24-APR-12 22:56:17 25-APR-12 00:29:23 24-APR-12 23:32:27 24-APR-12 22:56:00 

21421 CN121332 1 1 1 0 24-APR-12 20時49分25秒24-APR-12 22時36分37秒24-APR-12 21點59分三十秒24-APR-12 20: 49:00 21420 CE121331 1 2 1 0 24-APR-12 18:15:12 24-APR-12 20:30:16 24-APR-12 19:19:42 24-APR-12 18:15:00 21419 CN121330 1 1 1 0 24-APR-12 16時06分06秒24-APR-12十七時55分12秒24-APR-12 17時02分33秒24-APR-12 16時06分00秒 21418 CE121329 1 2 1 0 24-APR-12 14:04:36 24-APR-12 15:44:40 24-APR-12 14:50:33 24-APR-12 14:04:00

+0

請提供您的架構,示例數據和所需的輸出。 – RedFilter 2012-04-27 18:27:25

回答

3

它出現您正試圖提取給定日期的所有記錄。一般來說,最好的方法是建立一個查詢與此邏輯:

  • 的DateField < TRUNC(:結束日期)+ 1:取前一天的所有記錄的結束日期
  • 的DateField> = TRUNC後(:起始日期):讓所有的記錄或您的起始日期

開始後,我提到「TRUNC」因爲經常參數輸入查詢,像這樣包括時間部分。 trunc從日期中刪除時間部分。

在你的榜樣,我會想象查詢內容可以如下 - 我只是改變了「ti.endtime」使用「<」而不是「< =」,這樣你就不會從開始獲取記錄4月27日。

Select SUM(ltv.val) "CE" 
    FROM LADLE_TAP_VALUE ltv, LADLE_TAP_ID lti 
where ltv.id=108 
    AND ltv.ladletapid =lti.ladletapid 
    and lti.tapid IN (Select ti.TapID 
         FROM tap_index ti 
         WHERE ti.tapno like 'CE%' AND ti.starttime>=to_date('20120426', 'yyyymmdd hh24:mi:ss') and ti.endtime < to_date('20120427 00:00:00', 'yyyymmdd hh24:mi:ss')); 
+0

我可能無意中誤導了。我想捕獲X日抓取數據的所有數據,如果它的開始時間在前一天的開始時間之前,並且結束時間是當天的時間。意思是如果我的查詢需要04142012的所有數據,則ti.starttime爲04132012 23:10:13,並且ti.endtime爲04142012 01:32:21。 – 2012-04-27 18:48:16

0
ti.starttime >= $start and ti.endtime <= $end

選擇所有的跨度完全內部嵌合[$開始.. $端。

ti.endtime >= $start and ti.starttime <= $end將選擇所有跨度交叉[$開始.. $結束]不知何故。