按周计算记录的记录数 - Oracle SQL



我知道这相对简单,但我在档案中找不到解决方案,尽管我看到了类似的解决方案,但我的 SQL 不足以对它们进行逆向工程。

我所要做的就是计算团队中按周分组的呼叫数,这些呼叫数来自呼叫管理表。 下面是一些代码的示例,它返回 30,000 多个条目的计数。 如果可能的话,我希望看到这个数字根据周五到周五的范围分为几周和几天?

从 opencall 中选择 COUNT(*(哪里TRUNC(to_date(substr(LOGDATE,1,10(, 'DD-MM-YY'(( 介于 '01-JAN-14' 和 '31-DEC-14' 之间

关键字段是

日志日期

表名为

公开征集

因此,我可以创建一个该支持组每周记录的呼叫数列表,以便

记录的周呼叫第一周 134第二周 135第三周 189......

这很简单,但我可以使用这段代码在各种不同的字段上进行搜索,以识别一些模式。

我们所有的日期字段都是VARCHAR2(20字节(

我可以简单地按天对这个计数进行分组

    选择 COUNT(*(, TRUNC(to_date(substr(LOGDATE,1,10(, 'DD-MM-YY'((
来自 开放通话 哪里 TRUNC(to_date(substr(LOGDATE,1,10(, 'DD-MM-YY'(( 介于 '01-JAN-14' 和 '31-DEC-14' 之间 分组 by trunc(to_date(substr(LOGDATE,1,10(, 'DD-MM-YY'(( 排序方式:TRUNC(to_date(substr(LOGDATE,1,10(, 'DD-MM-YY'((

希望有人能帮忙。

对于按

周获取计数,您必须按trunc(your_date, 'IW')分组,但是如果您想在周五到周五使用next_day函数,然后按trunc(NEXT_DAY(your_date,'FRIDAY'), 'IW')分组,因此,您的查询应该是这样的:

select 
'WEEK '|| row_number() over(order by trunc(NEXT_DAY(to_date(substr(LOGDATE,1,10), 'DD-MM-YY'),'FRIDAY'), 'IW')) WEEK,
count(*) Calls Logged
from opencall
where trunc(to_date(substr(LOGDATE,1,10), 'DD-MM-YY')) BETWEEN '01-JAN-14' AND '31-DEC-14'
group by trunc(NEXT_DAY(to_date(substr(LOGDATE,1,10), 'DD-MM-YY'),'FRIDAY'), 'IW')   
order by trunc(NEXT_DAY(to_date(substr(LOGDATE,1,10), 'DD-MM-YY'),'FRIDAY'), 'IW');

只需从查询中删除closedby

with closed_calls as (
       select to_number(to_char(closedate, 'IW') as week_number, oc.*
       from opencall oc
       where  ((status > 15 or status = 6) and
              closedby in ('analyst1', 'analyst2', 'analyst3', 'analyst4', 'analyst5', 'analyst6', 'analyst7') and
              trunc(closeddate) between date '2014-10-01' and date '2014-12-31' 
      )
select week_number as "Week number", count(*) as "Calls closed"
from   closed_calls
group by week_number
order by week_number desc;

请注意,我更改了日期算术。 据推测,closedate作为日期/时间值存储在数据库中。 如果是这样,则无需将其转换为字符串进行比较。

最新更新