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'));

私が直面している問題は、開始時刻が 1 日の終わり近くになり、終了時刻が翌日の最初の数時間になることがあるということです。クエリの時間処理部分でその調整を行う方法がわかりません。これは問題です。なぜなら、そこにあるはずのディスプレイからの生産が毎日失われているからです。

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 12 年 4 月 24 日 20:49:25 12 年 4 月 24 日 22:36:37 12 年 4 月 24 日 21:59:30 12 年 4 月 24 日 20:49:00 21420 CE121331 1 2 1 0 12 年 4 月 24 日 18:15:12 12 年 4 月 24 日 20:30:16 12 年 4 月 24 日 19:19:42 12 年 4 月 24 日 18:15:00 21419 CN121330 1 1 1 0 24- 12 年 4 月 16:06:06 12 年 4 月 24 日 17:55:12 12 年 4 月 24 日 17:02:33 12 年 4 月 24 日 16:06:00 21418 CE121329 1 2 1 0 12 年 4 月 24 日 14 :04:36 2012 年 4 月 24 日 15:44:40 12 年 4 月 24 日 14:50:33 12 年 4 月 24 日 14:04:00

4

2 に答える 2

3

特定の日付のすべてのレコードを取得しようとしているようです。一般に、最善の方法は、次のロジックを使用してクエリを作成することです。

  • DateField < trunc(:EndDate) + 1: EndDate の翌日より前のすべてのレコードを取得します
  • DateField >= trunc(:StartDate): StartDate の開始日以降のすべてのレコードを取得します

このようなクエリへのパラメーター化された入力には時間部分が含まれることが多いため、「trunc」について言及します。trunc は、日付から時間部分を削除します。

あなたの例では、クエリは次のように読み取れると思います.4月27日の開始からレコードを取得しないように、「<=」の代わりに「<」を使用するように「ti.endtime」を変更しただけです。

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'));
于 2012-04-27T18:32:28.083 に答える
0

ti.starttime >= $start and ti.endtime <= $end[$start..$end] 内に完全に収まるすべてのスパンを選択します。

ti.endtime >= $start and ti.starttime <= $end何とか [$start..$end] と交差するすべてのスパンを選択します。

于 2012-04-27T18:40:18.907 に答える