AVG时间问题

时间:2019-01-08 21:26:04

标签: sql amazon-redshift

我遇到了平均时间的问题,我试图将其平均,然后尝试将其转换然后求平均。 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,

2 个答案:

答案 0 :(得分:2)

由于您的时间存储为varchar,并且Redshift中没有TimeInterval类型,因此您必须将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格式的帐户。在这里,我们将十进制转换为分钟(就像以前一样)。

答案 1 :(得分:0)

选择日期,   “代理名称”,   avg(SPLIT_PART(“处理时间”,':',1)* 60 + SPLIT_PART(“处理时间”,':',2):: decimal(18,2)+ SPLIT_PART(“处理时间”,':' ,3):: decimal(18,2)/60.00)作为AvgHandleTime 从Five9_data.calllog 技能所在(“ SF销售”,“ FYF销售”) 按“代理商名称”分组,日期 按日期排序DESC 限制100;