java - 按顺序组织/插入日期的算法
问题描述
我需要构建一个算法,可以查看其中有重叠日期的 X 条记录,并按时间顺序组织和重新插入这些日期值。例如:该表有这样的记录:
Start Date End Date Value
1/1/2019 12/31/2099 10
当插入这样的新记录时:
5/1/2019 5/31/2019 25
该算法应该像这样组织记录并将其插入到新表中:
1/1/2019 4/30/2019 10
5/1/2019 5/31/2019 25
6/1/2019 12/31/2099 10
不应修改原始表,即不重新插入/重新排序原始表中的记录。
关于实现这一目标的最有效方法的任何提示?不寻找特定于数据库的解决方案.. 仅编程。谢谢!
解决方案
首先找出日期可以重叠的方式。在我脑海中,时期可能重叠的方式是:
- 新行的开始日期之前和结束日期之后的行
- 新行的开始日期早于结束日期,结束日期晚于新行的行
- 开始日期在新行的开始日期之后,结束日期在新行的结束日期之前的行(期间完全在您的期间内)
- 开始日期在新行的开始日期之前,结束日期在新行的结束日期之后的一行(期间完全围绕您的期间)
可能还有其他可能性,但该组似乎是正确的。
假设第二个表中的行已经不重叠,您可以相对轻松地查询重叠行,然后您可以计算要使用的新日期组并更新您的第二个表。为计算编写大量单元测试。
请注意,这将是一个并发雷区(取决于您在其中执行此操作的应用程序类型)。如果两个用户可以同时提交一个新行,那么您将需要某种方法来确保读取、计算和更新是一个原子操作,否则您的第二个表将很快变得不一致。
推荐阅读
- javascript - 如何将 AppleScript/JXA 支持添加到非可可应用程序?
- javascript - 在 JavaScript 中更改字体颜色的问题
- plot - SAS Roc 曲线和 AUC
- sql-server - 如何在 Delphi 中使用 ADOQuery sum
- python - 如何将带有不规则格式列表列的 csv 导入 pandas DataFrame?
- javascript - element.currentSrc 在除 Firefox 之外的所有浏览器中返回 URL
- javascript - ReactJS - 地图中缺少属性
- java - 如何将 Arraylist 数据转换为 Vector 类型?
- elixir - 使用数据库组件测试构造函数
- python - 如何在if语句中使用正则表达式,python 3