2012-11-12 25 views
0

所以我有點憋屈此查詢我需要做的,我不知道它甚至意味着。Oracle和用戶輸入

我需要能夠找到從表題爲Vehicle_Details車輛數量,並檢查是否正在使用中的一段時間中,我想用它作爲所述波紋管。

當被安排了新的行程,管理員找到了一輛車,是不是已經在使用的行程時間。因爲這個查詢會經常需要,所以重要的是它可以輕鬆運行一個任意的開始和結束日期。因此它應該使用替代變量,以便在運行時提供行程開始和結束日期。

確保當它運行用戶只提示您提供開始和結束日期一次。還要確保顯示的任何車輛在指定的整個時間段內都可用 - 您必須在where子句中包含多個測試

任何代碼都會有幫助,但即使鏈接到可以幫助我自己寫的東西我不知道tbh。

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 
+0

您是否已經有一段代碼/查詢?你可以在這裏發佈表格模式/表格結構嗎? – bonCodigo

+0

這是你的意思嗎? 表我會用 TRIPS表(對於日期) TRIP_ID 出發 RETURN_DATE DURATION_LENGTH DRIVER_FIRST_NAME DRIVER_REFERENCE DRIVER_LAST_NAME 註冊 了reg 註冊 MAKE 模型 年 GVW車輛的詳細信息(用於如果需要的話ID) GVW REGISTRATION BODY VEHICLE_ID – TAM

+0

對不起,佈局不好 – TAM

回答

1

您需要查找特定日期範圍是否與任何預訂相交。這是區間交點算法。考慮下面的間隔[A,B][x,y]

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

所以你的查詢將如下:

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

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

的間隔[x,y][A,B]當且僅當相交如:

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) 

這是一輛車輛。如果查詢返回一行,則該車輛可用於給定時間間隔[:interval_start, :interval_end]