如何更新时间以匹配 SQL 中两个日期时间之间定义的平均时间?

How to update time to match with defined average time between two datetime, in SQL?

我有一个查询,它为我提供了两个日期时间列以及两个日期时间之间的时间。 我想更新 2 个日期时间之一,以便这 2 个日期时间之间的平均时间等于定义的平均时间。

    DATETIME_1       |   DATETIME_2       | time_between1and2(in minutes)
-------------------------------------------------------------------------
2021-11-03 12:28:42  |2021-11-03 12:25:31 | -3.1833  (<0 incorrect)
xxxx-xx-xx xx:xx:xx  |xxxx-xx-xx xx:xx:xx | -x.xxxx  (<0 incorrect)
xxxx-xx-xx xx:xx:xx  |xxxx-xx-xx xx:xx:xx | -x.xxxx  (<0 incorrect)
xxxx-xx-xx xx:xx:xx  |xxxx-xx-xx xx:xx:xx | x.xxxx   (>0 so correct)

DATETIME_1 和 DATETIME_2 之间的平均时间:- 2.51 分钟(例如)

平均通缉时间:2.12分钟(举例)

所以我需要通过更新两个日期时间之一来更新所有不正确的时间(两个日期时间之间的时间),以便平均时间(两个日期时间之间的平均时间)与所需的平均时间相匹配。

我不知道该怎么做。 Sql 或带有示例 table 名称的伪代码可能对我有帮助。

正如评论中所讨论的那样,您的问题非常含糊,但这里有一个如何进行更新的示例,就像我认为您正在描述的那样:

declare @sampleData table
(
    id int,
    Date1 datetime,
    Date2 datetime
)

insert into @sampleData values
(1, '2021-11-03 10:01:00.000', '2021-11-03 10:02:00.000'),
(2, '2021-11-03 10:03:00.000', '2021-11-03 10:06:00.000'),
(3, '2021-11-03 10:08:00.000', '2021-11-03 10:09:00.000'),
(4, '2021-11-03 10:16:00.000', '2021-11-03 10:16:30.000'),
(5, '2021-11-03 10:32:00.000', '2021-11-03 10:35:00.000'),
(6, '2021-11-03 10:48:00.000', '2021-11-03 10:51:00.000')

select * from @sampleData

update @sampleData
set Date2 = dateadd(minute,2,Date1)
where datediff(minute,Date1,Date2) > 2

select * from @sampleData

输出:

因此,我们更新所有日期之间的差异大于 2 分钟的记录,并将差异设置为恰好两分钟。

这假定 Date1 总是早于 Date2,尽管如果情况不一定如此,也有办法处理。

编辑:如果根据您的意见,您想要在现有时间上增加 2 分钟而不是将其准确设置为 2 分钟,那么您可以这样做:

update @sampleData
set Date2 = dateadd(minute,2+datediff(minute(Date1,Date2),Date1)
where datediff(minute,Date1,Date2) > 2