0

だから私は、私がしなければならないこのクエリに行き詰まっています。それが何を意味するのかさえわかりません。

Vehicle_Details というタイトルのテーブルから車両番号を見つけ、それが現在使用されているかどうかを確認できるようにする必要があります。次のように使用したいと思います。

新しい旅行が手配されているとき、管理者は、旅行期間中にまだ使用されていない車両を見つける必要があります。このクエリは頻繁に必要になるため、任意の開始日と終了日に対して簡単に実行できることが重要です。したがって、旅行の開始日と終了日を実行時に提供できるように、置換変数を使用する必要があります。

実行時に、ユーザーに開始日と終了日の入力を求めるプロンプトが 1 回だけ表示されるようにしてください。また、表示されているすべての車両が、指定された期間全体にわたって利用可能であることを確認してください。where 句に複数のテストを含める必要があります。

どんなコードでも役に立ちますが、自分で書くのに役立つものへのリンクもありません。

Example data from the three tables:
Trip_ID     Departure       Return_Date    Duration Registration
73180   07-FEB-12   08-FEB-12   1   PY09 XRH
73181   07-FEB-12   08-FEB-12   1   PY10 OPM
73182   07-FEB-12   10-FEB-12   3   PY56 BZT
73183   07-FEB-12   08-FEB-12   1   PY56 BZU
73184   07-FEB-12   09-FEB-12   2   PY58 UHF

Registration   Make          Model           Year
4585 AW        ALBION        RIEVER          1963
SDU 567M       ATKINSON      N/A             1974
P525 CAO       DAF           FT85.400        1996
PY55 CGO       DAF           FTGCF85.430     2005
PY06 BYP       DAF           FTGCF85.430     2006

Weight  Registration Body   Vehicle ID
20321   4585 AW     N/A      1
32520   SDU 567M    N/A      2
40000   P525 CAO    N/A      3
40000   PY55 CGO    N/A      4
40000   PY06 BYP    N/A      5
4

1 に答える 1

1

特定の日付範囲が予約と交差するかどうかを確認する必要があります。これは区間交差演算です。次の間隔[A,B]を考慮して[x,y]ください。

-----------[xxxxxxxxxxx]-------------
           A           B

---------------------[xxxxxx]--------
                     x      y

間隔は、次の場合にのみ[x,y]交差します。[A,B]

  1. B >= x
  2. A <= y

したがって、クエリは次のようになります。

SELECT * 
  FROM registrations reg
 WHERE reg.registration = :searched_vehicle
   AND NOT EXISTS (SELECT NULL
                     FROM reservations res
                    WHERE res.registration = reg.registration
                      AND res.return_date >= :interval_start 
                      AND res.departure <= :interval_end)

これは1台の車両用です。クエリが行を返す場合、この車両は指定された間隔で使用できます[:interval_start, :interval_end]

于 2012-11-12T12:23:44.340 に答える