计算每天的平均等待时间

时间:2018-01-11 12:10:56

标签: sql postgresql

我的表格结构为:

date        | customerID    | arrivalTime       | servedTime     |
------------------------------------------------------------------
2018-01-01  | 0001      |2018-01-01 18:55:00| 2018-01-01 19:55:00|
2018-01-01  | 0002      |2018-01-01 17:43:00| 2018-01-01 17:59:00|
2018-01-01  | 0003      |2018-01-01 14:01:00| 2018-01-01 14:10:00|
2018-01-02  | 0004      |2018-01-02 09:22:00| 2018-01-02 10:00:00|
2018-01-02  | 0005      |2018-01-02 12:34:00| 2018-01-02 13:10:00|
2018-01-02  | 0006      |2018-01-02 18:54:00| 2018-01-02 19:00:00|

我正在尝试生成一个查询,其中包含两列:

date  | averageWaitTime
-------------------------

然后我可以使用此结构来创建图表。我无法弄清楚如何将AVGGROUP BY结合起来并获得所需的结果。

我最初尝试使用我在以下查询生成的应用程序中的其他地方使用的分钟值来执行此操作:

cast(EXTRACT(EPOCH FROM (servedTime - arrivalTime )) as integer)/60

但这仍然是每位客户的记录,而不是白天。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

您不需要转换为秒来累加时间间隔 - 只需使用interval数据类型。

calc(我将列命名为列的第一个字母):

t=# select d,c,avg(s-a) from t group by d,c order by d,c;
     d      |      c      |   avg
------------+-------------+----------
 2018-01-01 |  0001       | 01:00:00
 2018-01-01 |  0002       | 00:16:00
 2018-01-01 |  0003       | 00:09:00
 2018-01-02 |  0004       | 00:38:00
 2018-01-02 |  0005       | 00:36:00
 2018-01-02 |  0006       | 00:06:00
(6 rows)

你的结果:

t=# select d,avg(s-a) from t group by d order by d;
     d      |   avg
------------+----------
 2018-01-01 | 00:28:20
 2018-01-02 | 00:26:40
(2 rows)

简单的算术检查:

t=# select interval '01:00:00' + '00:16:00' + '00:09:00';
 ?column?
----------
 01:25:00
(1 row)

t=# select interval '01:25:00'/3;
 ?column?
----------
 00:28:20
(1 row)

这是正确的,因为:

t=# select 85/3.0;
      ?column?
---------------------
 28.3333333333333333
(1 row)

和0.3(3)是三分之一,即20秒,28分钟,20秒

当然我计算算术平均值 - 因为它是最常见的,所以如果你没有指定一个,那就假定...