2016-12-04 63 views
0

我有一個應用程序在軌道上有約會屬於提供商,我期待創建一個查詢,查找提供商的約會空白約會約會存儲爲一個開始和完成兩者都是日期時間。理想情況下,我會打電話Provider.free_appointment_slots(長度,開始,完成),其中長度是所需約會的長度,開始和結束是搜索的範圍,即特定的一週或一天。從預約表中查找免費預約插槽Postgresql Rails

我覺得應該是有點類似這些... How to return all the free periods of time from an appointment set Finding free blocks of time in mysql and php?

我有一個約會表像數據:

ID |  Start  |  Finish  | ProviderID 
1  2016-11-12 09:00 2016-11-12 09:30  1 
1  2016-11-12 10:00 2016-11-12 10:30  1 
1  2016-11-12 11:30 2016-11-12 12:00  1 

我想能夠提供一個開始和結束時間來搜索和約會的長度和我的查詢返回可用的約會時間..例如如果我在2016-11-12 08:30和2016之間尋找約會-11-12 12:30有30分鐘的預約長度

我會接受的結果,如:

 Start  |  Finish 
2016-11-12 08:30 2016-11-12 09:00 
2016-11-12 09:30 2016-11-12 10:00 
2016-11-12 10:30 2016-11-12 11:00 
2016-11-12 11:00 2016-11-12 11:30 
2016-11-12 12:00 2016-11-12 12:30 

額外偉大的功能將能夠提供多種搜索的時間,如在不同天

我希望這是明確的任何幫助,將不勝感激

回答

0

好了,所以我設法拿出一個SQL查詢,這給了我正確的結果,這將是工作的一點點翻譯成軌道但它應該是一帆風順的這裏

SELECT Available_from, Available_to 
     FROM (
     SELECT @lasttime_to AS Available_from, start AS Available_to, @lasttime_to := finish 
     FROM (SELECT start, finish 
      FROM appointments 
      WHERE finish >= '2013-11-12 08:29' 
       AND start < '2016-11-12 13:01' 
       AND provider_id = 1 
      UNION ALL 
      SELECT '2016-11-12 08:30', '2016-11-12 08:30' 
      UNION ALL 
      SELECT '2016-11-12 13:00', '2016-11-12 13:00' 
       ORDER BY time_from 

      ) e 
     JOIN (SELECT @lasttime_to := NULL) init) x 
     WHERE Available_to > DATE_ADD(Available_from, INTERVAL 15 MINUTE)