首页 > 解决方案 > 有问题的平均时间

问题描述

我在平均时间时遇到问题,我尝试对其进行平均,我尝试对其进行转换然后对其进行平均。Redshift SQL 不支持看起来可行的一件事。

试图转换时间和平均时间,但都没有成功

Select 
  date,
  "agent name",
  (TO_CHAR((sum("handle time") || 'second')::interval,'MI.SS')) as total,
  (TO_CHAR((avg("handle time") || 'second')::interval,'MI.SS'))as AVGHandleTime
From five9_data.calllog
Where Skill in ('SF Sales', 'FYF Sales') 
Group By "agent name", date
Order By Date DESC
Limit 100

我正在尝试检索给定时间段内每个人的平均通话时间。我是 sql 新手,如果我遗漏了什么,我深表歉意。例如 4:36 (MM:SS) 将导致 4.6 作为小数。我希望这个问题比我的上一个问题更清楚。

处理时间值 00:17:00、00:18:13、00:01:55、00:05:40、

标签: sqlamazon-redshift

解决方案


由于您的时间存储为 varchar 并且没有TimeInterval在 Redshift 中键入,因此您必须将其转换mm:ss为数字以便您可以取平均值(因为您不能平均字符串/varchar)。

您可以使用函数SPLIT_PART拆分指定分隔符的字符串并检索其中的一部分,然后应用一些数学运算来获得时间的十进制表示:

SELECT date,
  "agent name",
  avg(SPLIT_PART("handle time", ':', 1)::decimal(18,2)*60.00 + SPLIT_PART("handle time", ':', 2)::decimal(18,2) + SPLIT_PART("handle time", ':', 3)::decimal(18,2)/60.00) as AvgHandleTime
From five9_data.calllog
Where Skill in ('SF Sales', 'FYF Sales') 
Group By "agent name", date
Order By Date DESC
Limit 100;

我没有一个 redshift 实例来测试它,但它应该让你在球场上。

更新:我已更新以考虑hh:mm:ss格式。在这里,我们转换为十进制形式的分钟(就像我们以前一样)。


推荐阅读