我对SQL没有太多经验,但需要按周生成一些表格、分组结果。我已经建立了一个到oracle数据库的ODBC连接,并想为一些pivot图表提取这些数据。目前,我必须每周通过SupportWorks报告手动提取这些数据,并希望实现自动化。
我显然不能添加一个图像来向你展示它应该是什么样子,但实际上每个分析师都有一条线,覆盖了一年中的所有星期,显示了他们每周关闭的电话数量。
所以我想从年初开始计算每个分析师每周的通话次数,这样我就有了一个所有分析师的表格。
我想实际上只有两个相关字段,但我无法计算出如何每周都做,每个分析师都有额外的行,记住我的KPI周是周六到周一。如果有一个系统定义的星期,我可以移动我的KPI日期以适应它吗?
Closedate(日期呼叫已关闭)
closedby(谁结束了通话)
如果可能的话,我将非常感谢这里的一些帮助。
我试着研究一个解决方案,但找不到什么能帮我的。
这里有一些例子SQL集中在有问题的调用上。有些已经改为匿名。
我把这个放在上面的列表中,因为这个窗口的格式有点像90年代。
因此,上面的代码将提取大约1300行的调用信息,然后我希望每周都有列,并按分析师列出每一行在该周结束的调用数。
我试着用一个评论者友好地提供的代码示例来做这件事,但仍然得到一个错误。
选择to_number(to_char(closedate,'IW'))作为“周数”
,closedby as "Closed by"
,count(closedate) as "Calls closed"
from opencall
where
((状态)
并在('analyst1','analyst2','analyst3','analyst4','analyst5','analyst6','analyst7')中关闭
and trunc(to_date(substr(Closedate,1,10),'DD-MM-YY'))介于'01-Oct-14'和'31-DEC-14'之间)
试试这个:
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')
然后你可以截断它,去掉时间部分,然后提取周数。
如果您不介意移动您的关键绩效指标周,这应该很容易。您可以使用格式掩码将日期转换为星期数字。格式掩码将首先转换为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标准周编号,该编号从每年的第一个星期一开始。
您的完整查询如下所示:
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
的问题,您错过了在数据进入数据库时验证数据的简单方法。
Support for the Oracle database. The following table summarizes current support levels for database release versions. 支持的Oracle版本 The following dialect/DBAPI options are available. Please refer to ind
我刚接触oracle forms,遇到了一个问题。我在表单中有两个具有相同字段的多个记录块。 我查询一个块的数据,它被填充。 哪里有一种方法可以将所有行从填充的块复制到“复制”块?
问题内容: 在OracleDoc中没有表达式背后的例子,所以我尝试使用Java语法,这应该在查询后得到任何数字 但是什么也没显示! 问题答案: 出于争论的考虑,REGEXP_SUBSTR也可以工作:
问题内容: 我有一个表(日期,有效负载),其中包含约10年的数据,我想基于14天(2周)和90天(12周)的间隔计算移动平均值(MA),以显示有效负载的趋势 我已经写了这个查询,但是它得到了错误的值 实际上我知道是什么,但我不了解Oracle的工作原理! 我可以在Excel中进行计算,但是我需要在数据库级别执行此操作,能否请您告诉我如何执行此操作? 问题答案: 我不明白使用的目的是什么?根据文档,
我需要一个特定的业务场景来设置一个实体(不是PK)上的字段,一个序列中的数字(序列必须是最小值和最大值之间的数字) 我这样定义序列: 在Java代码中,我从序列中检索数字,如下所示: 我的问题是: 如果我在一个事务中调用这个“中选择mySequence.nextval”,同时在另一个事务中调用相同的方法(并行请求),那么确定序列返回的值是不同的吗? 不可能从第一个事务中读取未提交的值吗? 因为假设
问题内容: 我有一个名为的约束。我如何找到该约束是什么?有没有办法查询所有约束? 问题答案: 像所有数据字典视图一样,如果您只想检查当前架构,则为USER_CONSTRAINTS视图,对于管理用户则为DBA_CONSTRAINTS视图。 约束名称的构造指示系统生成的约束名称。例如,如果我们在表声明中指定NOT NULL。或者实际上是主键或唯一键。例如: 检查,主要。 通常,给关系约束一个明确的名称