当前位置: 首页 > 面试题库 >

合并/合并日期范围的算法

益稳
2023-03-14
问题内容

我试图找到关于如何将日期范围合并到一个数据库记录(数组元素)中的最佳方法。

这是我的数据:

  Array
(
    [0] => Array
        (
            [id] => 18298
            [start_date] => 2011-07-09
            [end_date] => 2011-10-01
        )

    [1] => Array
        (
            [id] => 18297
            [start_date] => 2011-06-01
            [end_date] => 2011-06-30
        )

    [2] => Array
        (
            [id] => 17113
            [start_date] => 2011-03-31
            [end_date] => 2011-05-31
        )

    [3] => Array
        (
            [id] => 20555
            [start_date] => 2011-01-03
            [end_date] => 2011-03-31
        )
)

合并它们之后,数组(或数据库)应如下所示:

Array
(
    [0] => Array
        (
            [merged_ids] => 18298
            [start_date] => 2011-07-09
            [end_date] => 2011-10-01
        )

    [1] => Array
        (
            [merged_ids] => 18297, 17113, 20555
            [start_date] => 2011-01-03
            [end_date] => 2011-06-30
        )
)

是否有任何算法可以遍历所有元素/范围并将它们组合在一起?通过数据库(MYSQL)或编码(PHP)哪种方法更好/更容易做到?

任何建议都受到高度赞赏。

谢谢!

更新: 抱歉,我没有提供足够的信息:我们应该合并任何连续和重叠的日期范围。


问题答案:

按开始日期排序。

然后遍历并检查下一项的开始日期是在当前结束日期之前还是之后。如果是这样,则将下一个合并到当前的一个。然后继续。



 类似资料:
  • 问题内容: 我有日期Ymd格式的数组,该格式可以是相隔一天的十个设置日期的任意组合。 例如:这是全套: 2011-01-01、2011-01-02、2011-01-03、2011-01-04、2011-01-05、2011-01-06、2011-01-07、2011-01-08、2011- 2011年1月9日至01日 从该集合创建的数组可以是日期的任何组合-所有日期,其中一个日期,一些连续日期,所

  • 我知道合并排序算法的基本概念,但是当涉及到通过递归实现它时,我很难理解它是如何工作的。据我所知,合并排序函数将我们当前的数组分成两半,并使用递归我们一直这样做,直到每边只剩下一个元素。 如果我们的数组是{38、27、43、3、9、82、10},那么我们的递归将从使用子数组(原始数组的左侧)调用自身开始,并每次重复该过程,将数组减半并存储最左侧,直到达到1个元素: 然后在我们的第二个子例程中,我们继

  • 问题内容: 如果我在表中有2个日期列,并且。如何返回给定日期介于这两个日期之间的行?例如: 如果给定的日期是 它应该返回以下行 来自以下各行: sql可能吗? 我正在使用sql server 2008。 问题答案: 使用SQL Server,它实际上非常简单:

  • 我正在尝试合并两个列表,但出现错误。有人有想法吗? 下面是我的合并函数。 这是我的排序函数,它在行my_Merge_Port(container,first_index,mid_index)中生成错误 如果first_index,我也会收到这个错误 当我调用这个函数时,我使用mymgsor(sample_list,0,len(sample_list)-1)

  • 问题是关于从16:43到23:34的视频中的合并排序http://youtu.be/M814OagXWTI?t=16m43s 在退出左/右排序合并递归后,我不清楚我们是如何合并回这些子数组的。让我们从最底部开始,当我们的元素被分成两个子数组时,一个左子数组称为B,一个右子数组称为C。在16:43左右,我们跳转到合并函数,对数组B和C进行排序,这两个数组只有8和3。合并排序函数(下面的代码)基本上通

  • 问题内容: 我的数据库中有以下一组匹配日期的日期(dd / MM / yyyy): 事件具有开始和结束日期(时间无关紧要),并且endDate为NULL表示事件仍在进行中。 我想确定的是两个任意日期之间的日期范围,其中a)没有事件,b)事件重叠。 因此,对于输入日期范围01/04/2009-30/06/2009,我希望得到以下结果: 注意,作为结果,两个相邻的重叠范围是可以接受的。 谁能用SQL算

  • 作为Mergesort算法的一部分,双向合并被广泛研究。但我有兴趣找出执行N路合并的最佳方法? 比方说,我有N个排序100万整数的文件。我必须将它们合并成1个文件,其中会有那些1亿排序的整数。 请记住,这个问题的用例实际上是基于磁盘的外部排序。因此,在实际场景中也会存在内存限制。因此,一次(99次)合并两个文件的天真方法是行不通的。假设每个阵列只有一个小的内存滑动窗口。 我不确定是否已经有一个标准

  • 我在理解合并排序算法的“合并”部分时有点困难,因为我试图在上下文中理解算法的部分,而某些变量/循环对我来说没有意义。我理解递归除法过程和合并的排序方面,但在这个特定的合并算法中: 我不明白最后3个循环: 你能解释一下这3个循环在合并的上下文中是用来做什么的吗?还有什么进一步的建议可以帮助你更好地理解合并排序算法的合并部分吗?