计算日期范围的重叠数量

Posted

技术标签:

【中文标题】计算日期范围的重叠数量【英文标题】:Calculate amount of date ranges' overlaps 【发布时间】:2020-02-20 20:32:09 【问题描述】:

我尝试存储不同服务的可用时间。 (每个工作日(8、9 小时)、24/7 等) 一个工作日可以有不同的办公时间(08:00-16:00 或 09:00-17:00、08:00-18:00 等)

还有国定假日,正常工作日就像周末一样,任何给定的周末也可以是工作日。

将其存储在数据库 (PostgreSQL) 中的最佳方式是什么?

背景

主要目标是计算给定时间范围内的服务时间是否有多少分钟。

A)服务时间仅为工作日(08:00-16:00),日期范围为 [2019-10-21 15:00(星期一)- 2019-10-22 09:00(星期二)]。整个航程长达 18 小时,但服务时间只有 2 小时。

B) 我也想计算如果我知道开始时间(2019-10-21 15:00)并且有3个小时可以完成工作(工作时间)那么什么时候是结束日期? (2019-10-22 10:00 - 星期一 1 小时,星期二 2 小时)

【问题讨论】:

【参考方案1】:

我会完全按照您的描述存储数据。

您可以为工作窗口设置一张桌子,即周一至周五 08:00 至 16:00

每个服务都有它的日期范围,启动和停止。我猜一个服务会有多个日期范围,所以您可能需要一个包含 dateRangeIdstartstop 列的日期范围表。

当你想计算一些东西时,你拉取服务的数据,拉取工作日的数据,然后计算实际服务时间是多少以及你需要回答的任何其他问题:)

【讨论】:

以上是关于计算日期范围的重叠数量的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 计算两个日期范围重叠

如果我们有很多任务并且每个任务的日期范围可能重叠,如何计算任务的工作天数

根据包含日期范围的观察数量按日期计算

计算日期范围内的星期六和星期日的数量 - oracle [重复]

如何计算 BigQuery 中日期间隔联合的重叠

计算实际停机时间,忽略日期/时间的重叠