Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询:检索具有重叠的期间的现有日期_Mysql_Sql - Fatal编程技术网

Mysql SQL查询:检索具有重叠的期间的现有日期

Mysql SQL查询:检索具有重叠的期间的现有日期,mysql,sql,Mysql,Sql,我遇到了一个相当复杂的产品/可用性问题,我就是无法解决,而且我在任何地方都没有发现任何类似的问题 表“产品””: 表“期间””: 在我的例子中,产品可以与许多期间关联,即使在相同的日期范围内(开始/结束) 示例:对于产品“a” 第1阶段)开始:2013-01-01 | |结束:2013-01-07 | |价格:200 第二阶段)开始:2013-01-07 | |结束:2013-01-14 | |价格:250 第三阶段)开始日期:2013-01-07 | | | |结束日期:2013-01-10

我遇到了一个相当复杂的产品/可用性问题,我就是无法解决,而且我在任何地方都没有发现任何类似的问题

表“产品””:

表“期间””:

在我的例子中,产品可以与许多期间关联,即使在相同的日期范围内(开始/结束)

示例:对于产品“a

第1阶段)开始:2013-01-01 | |结束:2013-01-07 | |价格:200

第二阶段)开始:2013-01-07 | |结束:2013-01-14 | |价格:250

第三阶段)开始日期:2013-01-07 | | | |结束日期:2013-01-10 | | | |价格日期:100 | |包含在上述第二阶段

第4期)开始:2013-01-10 | |结束:2013-01-14 | | |价格:200##包含在上述第(2)期中

第5期)开始:2013-01-11 | |结束:2013-01-14 | | |价格:150##包含在上述第(2)期内

我需要做的是检索给定日期范围内的所有产品及其价格

用户将搜索的内容,以及我想要获得的内容:

  • 搜索2013-01-01和2013-01-07之间的产品:应返回产品A,价格为200(第1期)

  • 在2013-01-02和2013-01-07之间搜索:应返回产品A,因为该期间未完全包括在内(缺少2013-01-01天)

  • 在2013-01-07和2013-01-14之间搜索(最复杂的情况):它应该返回产品A,可能有“两个”期间:(2)和(3+4)。但它不应重现期(3+5),因为2013-01-10日存在“漏洞”

我也希望能够检索到最低的价格。在上面的第三种情况下,它应该返回250,因为(2)价格比(3+4)价格最低


非常感谢您的帮助。

这不是一个解决方案,但它太长,无法发表评论

您要求做的事情在SQL中几乎是不可能的,在编程语言中是非常困难的。要解决这个问题,您需要找到两个日期之间所有可能的时间“平铺”。平铺是一个单独的记录,平铺是一组覆盖时间段的记录

问题是有许多不同的可能解决方案,都有不同的规模

在支持递归的编程语言中,可以采用动态编程方法。这将基本上从任何时期开始,然后递归来解决问题,然后考虑下一个周期(深度优先的方法)。这在SQL中不容易实现


也许在这个问题上还有额外的限制,使之更容易处理。或者,也许其他人会以不同的方式理解它,并看到解决方案(这将非常有趣)。我的观点是,这是不值得在SQL中做的,除非你能进一步约束这个问题。

你是否需要考虑两个以上可能组合的范围?是的,比如2013 / 01/01-2013/01/02 + 2013/01/02-2013/01/03/2013/01/03-2013/01/07应匹配搜索SWO/Y/01-2013-01-07。
- id
- name
- id
- start (Date)
- end (Date)
- price (int)
- product_id