2017-10-12 64 views
-4

請接受我對缺少嘗試代碼的道歉。MySQL查詢日期範圍 - 查找常見期間

我無法理解這一點 - 甚至不知道是否可行!

我有一張桌子上裝滿了'日期插槽',這些可以由個人預訂。

的時隙表看起來像這樣:

ID | Price | Available_from | Available_ to  
------------------------------------ 
1 | 20.00 | 2017-10-01 | 2018-01-01 
2 | 20.00 | 2017-11-01 | 2017-12-07 
3 | 20.00 | 2017-10-31 | 2018-01-31 
4 | 20.00 | 2017-10-22 | 2017-11-21  
------------------------------------ 

在這些行中,有一個共同的時間範圍,其中所有四個結果是可用的,2017年11月1日> 2017年11月21日

我想查詢我的數據庫,看看是否1)每個結果都有一個共同的範圍,2)如果有,獲取日期範圍。

絕望的幫助!

謝謝

+0

那麼,如果你只是看看你自己的示例數據,它應該很快就會變得明顯,期望的結果包括最大的Available_from日期和最小的Available_日期。 (至於那些,去研究「mysql groupwise maximum」爲基本思想)。當然,如果現有的時間間隔可能存在「漏洞」,那麼它就不那麼簡單了,但是你的例子並不包含這樣的一個案例。所以現在你的下一步就是思考這種情況下的「邊緣情況」是什麼,以及他們可能需要什麼特定的處理。 – CBroe

+0

看看http://salman-w.blogspot.ca/2012/06/sql-query-overlapping-date-ranges.html。同時研究用於sql日期範圍交集的StackOverflow,你會發現一些詳細的答案。例如https://stackoverflow.com/questions/4490553/detect-overlapping-date-ranges-from-the-same-table – Nic3500

+0

謝謝@CBroe,已經這樣做了,並加入了一些理智 - 是的,它似乎很遠簡單!謝謝,我現在就來探討一下。 – user3061608

回答

1

,我認爲這會工作:

SELECT MAX(Available_from) as MatchFrom, 
     MIN(Available_to) as MatchTo 
FROM Temporary.test 
WHERE 
    (SELECT MAX(Available_from) FROM Temporary.test) 
    <=(SELECT MIN(Available_to) FROM Temporary.test) 

它將返回NULL,如果沒有重疊範圍。