Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle-每个分析师每周结束组呼叫_Sql_Oracle - Fatal编程技术网

Sql Oracle-每个分析师每周结束组呼叫

Sql Oracle-每个分析师每周结束组呼叫,sql,oracle,Sql,Oracle,我对SQL不是很有经验,但需要按周生成一些表格、分组结果。我已经建立了一个到oracle数据库的ODBC连接,并希望为一些透视图提取这些数据。目前,我必须每周通过SupportWorks报告手动提取这些数据,并希望将其自动化 显然,我不能添加一个图像来向您展示它应该是什么样子,但实际上,每个分析师都有一条线,涵盖一年中所有的几周,以及他们每周结束的呼叫数 所以我想我想计算一下从年初开始,每个分析师每周接到的电话数量,这样我就有了一个表格,可以容纳所有分析师 我想实际上只有两个相关字段,但我不知道

我对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'作为周数

      ,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-无效数字*原因:*操作: