如何更新时间以匹配 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
我有一个查询,它为我提供了两个日期时间列以及两个日期时间之间的时间。 我想更新 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