【问题标题】:MySQL query date range - find common periodsMySQL查询日期范围 - 查找常见时期
【发布时间】:2017-10-12 12:10:17
【问题描述】:

对于缺少尝试的代码,请接受我的歉意。

我无法理解这一点 - 甚至无法弄清楚它是否可行!

我有一张桌子,里面有“日期空档”,可以由个人预订。

时隙表如下所示:

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) 如果有,请获取日期范围。

急需帮助!

谢谢

【问题讨论】:

  • 好吧,如果您只看一下您自己的示例数据,很快就会发现所需的结果由最大的 Available_from 日期和最小的 Available_to date 组成。 (至于获得这些,请研究“mysql groupwise maximum”的基本思想。)当然,如果现有间隔中可能存在“漏洞”,那么它不会那么简单 - 但您的示例不包含这样的一件事。所以现在你的下一步是考虑这种情况下的“边缘情况”是什么,以及他们可能需要什么具体的处理。
  • salman-w.blogspot.ca/2012/06/…。还要研究 StackOverflow for sql date range intersection,你会发现一些详细的答案。前stackoverflow.com/questions/4490553/…
  • 感谢@CBroe,将其布置成这样并添加了一些理智 - 是的,它看起来要简单得多!谢谢,我现在就去探索一下。

标签: php mysql date range


【解决方案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。

【讨论】:

    猜你喜欢
    • 2014-01-07
    • 2011-01-01
    • 1970-01-01
    • 2020-10-31
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多