我有以下数据-我需要在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
为此,我应该将ans设置为00:30 ...请让我知道我应该如何在SQL中计算该值?
答案 0 :(得分:1)
我的想法是将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
的{{1}}(对于负值,则需要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'
,因为如果超过24小时,时间就会结束。