如何在SQL中计算相对于午夜的平均时间?

时间:2018-08-22 05:15:24

标签: sql postgresql average data-analysis sql-function

我有以下数据-我需要在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中计算该值?

1 个答案:

答案 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小时,时间就会结束。