我创建了一个用于显示查询数据的屏幕。该查询应该从过程中收集每日生产的材料。查询如下:
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:30 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 17: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 :(得分:3)
您似乎正在尝试提取给定日期的所有记录。通常,最好的方法是使用以下逻辑构造查询:
我提到“trunc”,因为像这样的查询的参数化输入通常包括时间部分。 trunc从日期中删除时间部分。
在您的示例中,我认为查询可以如下所示 - 我只是将“ti.endtime”更改为使用“&lt;”而不是“&lt; =”,这样你就不会从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'));
答案 1 :(得分:0)
ti.starttime >= $start and ti.endtime <= $end
选择完全适合[$ start .. $ end]内的所有跨度。
ti.endtime >= $start and ti.starttime <= $end
将以某种方式选择与[$ start .. $ end]相交的所有跨距。