gpt4 book ai didi

sql - 事务处理 SQL : Detect Date boundaries across multiple rows

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:19:23 26 4
gpt4 key购买 nike

我正在创建一个存储过程,它根据 SQL 数据库中的数据生成报告,并将这些报告存储在单独的数据库中。报告的数据是电机运行的日期范围内的总时间。我希望能够检测我报告的时间范围是否与以前基于日期时间的报告重叠。

例如我们有下表:

Row-----Value-----StartDate------------------EndDate
1-------12--------2010-01-21 00:00:00.000----2010-01-21 11:59:99.997
2-------12--------2010-01-22 00:00:00.000----2010-01-22 11:59:99.997
3-------12--------2010-01-22 12:00:00.000----2010-01-22 23:59:99.997
4-------12--------2010-01-23 00:00:00.000----2010-01-23 11:59:99.997
5-------12--------2010-01-24 00:00:00.000----2010-01-24 11:59:99.997

如果我要将以下行插入到该表中:

输入:

 1. Value = 12, StartDate = 2010-01-21 6:00:00.000, EndDate = 2010-01-21 17:59:99.997
2. Value = 14, StartDate = 2010-01-21 11:00:00.000, EndDate = 2010-01-22 0:59:99.997
3. Value = 13, StartDate = 2010-01-20 12:00:00.000, EndDate = 2010-01-21 0:59:99.997

输出:

 1. Value = 6, StartDate = 2010-01-21 12:00:00.000, EndDate = 2010-01-21 17:59:99.997
2. Value = 12, StartDate = 2010-01-21 12:00:00.000, EndDate = 2010-01-21 23:59:99.997
3. Value = 12, StartDate = 2010-01-20 12:00:00.000, EndDate = 2010-01-20 23:59:99.997

如您所见,调整了开始/结束日期并删除了额外的时间。请务必注意,结果是仅添加 1 行,而不是同时添加所有 3 行。

我想我看这个问题的时间太长了,只见树木不见森林。然而,在写这个问题的过程中,我想出了更多的想法来尝试以及修改我的表格,但仍然想看看你们如何处理这种情况。

问题:您会使用什么查询来检测跨多行的开始日期和结束日期是否与其他日期范围重叠?

干杯!

* 编辑 *

为了阐明我的示例数据,输出 1 的 Value=6 是因为它与第 1 行冲突 6 小时。以下是每个输入的更改。

  1. 输入与第 1 行冲突,将输入的开始时间移动到行的结束日期 + 3 毫秒并查询(时间跨度 = 6 小时)。
  2. 输入与第 1 行和第 2 行冲突,将开始时间移至第 1 行的结束日期 + 3 毫秒,将结束时间移至第 2 行的开始日期 - 3 毫秒。 (时间跨度 = 12 小时)
  3. 输入与第 1 行冲突,将结束时间移至第 1 行的 EndDate - 3 毫秒。 (Timepsan = 12 小时)。

虽然此示例仅显示 1 天内的经期,但也可能存在经期跨越多天的实例。

最佳答案

要查找重叠,请考虑在重叠行中,两个 StartDates 必须出现在 EndDate 之前。

所以你应该能够做这样的事情:

select *
from yourTable t1
join
yourTable t2
on t2.StartDate < t1.EndDate
and t1.StartDate < t2.EndDate

您可能希望使用检查约束来确保没有 StartDate > EndDate 的行。否则,包括:

   and t1.StartDate < t1.EndDate
and t2.StartDate < t2.EndDate

关于sql - 事务处理 SQL : Detect Date boundaries across multiple rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2180899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com