MySQL查询日期范围 - 查找常见期间

问题描述:

请接受我对缺少尝试代码的道歉。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

,我认为这会工作:

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,如果没有重叠范围。