如何计算 SQL 午夜的平均时间?

How to calculate average of time with respect to midnight in SQL?

我有以下数据 - 我需要计算此时间相对于 SQL 午夜时间的平均值,请问我应该如何计算?如果我在几秒钟内转换它们并简单地取平均值,我得到的答案是:10:17:20 这是错误的。我需要 ans 应该在 23:00

附近的某个地方
0:06:43
0:10:26
0:12:49
0:18:21
0:19:35
0:22:40
1:57:01
2:21:41
15:56:12
16:40:22
21:31:45
23:26:56
23:38:29
23:38:30
23:38:33

考虑这个小例子。 - 我的数据是

2:21:41
0:19:35
0:18:21
23:38:33

为此我应该得到 00:30 的答案...你能告诉我应该如何在 SQL 中计算吗?

我的想法是把time改成interval。这样你就可以改变你的价值在午夜左右通过负值:

CASE WHEN value > '12:00:00' THEN value - time '24:00' ELSE value - time '00:00' END

参见 documentation 中的 time - time 运算符。

您将获得:

00:06:43    ->   00:06:43
00:10:26    ->   00:10:26
00:12:49    ->   00:12:49
00:18:21    ->   00:18:21
00:19:35    ->   00:19:35
00:22:40    ->   00:22:40
01:57:01    ->   01:57:01
02:21:41    ->   02:21:41
15:56:12    ->  -08:03:48
16:40:22    ->  -07:19:38
21:31:45    ->  -02:28:15
23:26:56    ->  -00:33:04
23:38:29    ->  -00:21:31
23:38:30    ->  -00:21:30
23:38:33    ->  -00:21:27

现在您可以计算平均值了。对于指定的数据,您将得到 -00:54:39.8,即 23:05:20.2(对于负值,您需要 + time '24:00')。

所以,最终的公式是:

AVG(
    CASE WHEN value > '12:00:00' THEN value - time '24:00' ELSE value - time '00:00' END
) + time '24:00'

你总是可以+ time '24:00',因为如果超过 24 小时,时间将被换行。