2012-04-27 91 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将选择所有跨度交叉[$开始.. $结束]不知何故。