Sql Oracle-每个分析师每周结束组呼叫
我对SQL不是很有经验,但需要按周生成一些表格、分组结果。我已经建立了一个到oracle数据库的ODBC连接,并希望为一些透视图提取这些数据。目前,我必须每周通过SupportWorks报告手动提取这些数据,并希望将其自动化 显然,我不能添加一个图像来向您展示它应该是什么样子,但实际上,每个分析师都有一条线,涵盖一年中所有的几周,以及他们每周结束的呼叫数 所以我想我想计算一下从年初开始,每个分析师每周接到的电话数量,这样我就有了一个表格,可以容纳所有分析师 我想实际上只有两个相关字段,但我不知道如何每周都做,每个分析师都有额外的行,记住我的KPI周是周六到周一。如果有系统定义的一周,我可以移动我的KPI日期以适应它吗 closedate通话已结束 是谁结束了电话 如果可能的话,我非常感谢您的帮助 我试着研究一个解决方案,但找不到什么可以帮助我的 下面是一些SQL示例,重点介绍有问题的调用。有些已经改为匿名 选择closedate,closedby from opencall where 状态>15或状态=6 在“analyst1”、“analyst2”、“analyst3”、“analyst4”、“analyst5”、“analyst6”和“analyst7”中接近 2014年10月1日至2014年12月31日之间的年月日 按截止日期订购 我把它放在上面的一个列表中,因为这个窗口的格式有点1990年代的 因此,上面的代码将提取大约1300行的调用信息,我希望这些信息每周都有列,并按分析师列出每行在该周结束的调用数 我试着用一位评论员提供的代码示例来做这件事,但仍然得到了一个错误 选择to_number to_charclosedate,'IW'作为周数Sql Oracle-每个分析师每周结束组呼叫,sql,oracle,Sql,Oracle,我对SQL不是很有经验,但需要按周生成一些表格、分组结果。我已经建立了一个到oracle数据库的ODBC连接,并希望为一些透视图提取这些数据。目前,我必须每周通过SupportWorks报告手动提取这些数据,并希望将其自动化 显然,我不能添加一个图像来向您展示它应该是什么样子,但实际上,每个分析师都有一条线,涵盖一年中所有的几周,以及他们每周结束的呼叫数 所以我想我想计算一下从年初开始,每个分析师每周接到的电话数量,这样我就有了一个表格,可以容纳所有分析师 我想实际上只有两个相关字段,但我不知道
,closedby as "Closed by"
,count(closedate) as "Calls closed"
from opencall
where
状态>15或状态=6
在“analyst1”、“analyst2”、“analyst3”、“analyst4”、“analyst5”、“analyst6”和“analyst7”中接近
2014年10月1日至2014年12月31日之间的日期为1,10,'DD-MM-YY'试试以下方法:
with closed_calls as
(select to_number(to_char(trunc(to_date(closedate, 'DD/MM/YYYY HH24:MI:SS')), 'IW')) as week_number
,closedby
from opencall
where ((status > 15 or status = 6)
and closedby in ('analyst1','analyst2','analyst3', 'analyst4','analyst5','analyst6','analyst7')
and trunc(to_date(closedate, 'DD/MM/YYYY HH24:MI:SS')) between '01-OCT-14' and '31-DEC-14'))
select week_number as "Week number"
,closedby as "Closed by"
,count(closedby) as "Calls closed"
from closed_calls
group by week_number
,closedby
order by week_number desc
,closedby asc;
日期存储为字符串,因此必须首先转换为日期数据类型:
to_date(closedate, 'DD/MM/YYYY HH24:MI:SS')
然后,您可以截断它以除去时间部分,然后提取周数
如果您不介意每周移动KPI,这应该很简单。可以使用格式掩码将日期转换为周数。格式掩码将首先转换为varchar2字符串,因此您可以对数字执行第二次转换以进行排序
to_number(to_char(trunc(to_date(closedate, 'DD/MM/YYYY HH24:MI:SS')), 'WW'))
将返回周数,从一年的第一天开始
to_number(to_char(trunc(to_date(closedate, 'DD/MM/YYYY HH24:MI:SS')), 'IW'))
将返回ISO标准周编号,该编号从每年的第一个星期一开始
to_number(to_char(trunc(to_date(closedate, 'DD/MM/YYYY HH24:MI:SS')), 'IW'))
您的完整查询如下所示:
select to_number(to_char(trunc(to_date(closedate, 'DD/MM/YYYY HH24:MI:SS')), 'IW')) as "Week number"
,closedby as "Closed by"
,count(closeddate) as "Calls closed"
from your_table
where ...
group by to_number(to_char(trunc(to_date(closedate, 'DD/MM/YYYY HH24:MI:SS')), 'IW'))
,closedby
编辑:我可能是想得太多了。如果你的一周从周日开始,我认为你只需在你的结束日期中增加一天就可以得到你所需要的,即:
select to_number(to_char(trunc(to_date(closedate, 'DD/MM/YYYY HH24:MI:SS')+1), 'IW')) as "Week number"
,closedby as "Closed by"
,count(closeddate) as "Calls closed"
from your_table
where ...
group by to_number(to_char(trunc(to_date(closedate, 'DD/MM/YYYY HH24:MI:SS')+1), 'IW'))
,closedby
在你相信我的话之前先测试一下
如果仍然出现转换错误,则closedate中可能存在与格式掩码不匹配的可疑值。这就是将日期存储为varchar2的问题所在,您错过了一种在数据进入数据库时验证数据的简单方法。您能描述一下相关的一个或多个表吗?事实上,我误解了这个问题,列名称仍然存在,但谢谢如果您不介意每周移动KPI,那么查询应该很容易。如果您更喜欢星期六到星期一,这可能会更尴尬,但肯定可以做到。目前,我的KPI周是从星期天到星期六,但这只是因为这是支持工作的方式,报告在其周范围内工作。如果我能找到上述问题的解决方案,我在KPI周报告中的灵活性没有问题。更多关于closedate栏的信息。看起来好像是varchar2,前10个字符以“DD-MM-YYYY”格式保存日期。正确吗?ORA-00937:没有一个组功能00937。00000-没有单个分组函数*原因:*操作:第19行第26列出现错误,忘记了分组方式,请稍候。我尝试将您的代码与我的代码一起使用,但出现了上述错误。我无法将代码放在这些注释字段中,因为它会丢失所有格式。我会看看我能做些什么来重新发布它。顺便说一句,谢谢你的帮助。好吧,让我试试看;仍存在错误ORA-01722:无效号码01722。00000-无效数字*原因:*操作: