2014-12-03 166 views
1

我知道这是相对简单的,但我无法在档案中找到解决方案,虽然我看到类似的但我的SQL不足以对它们进行逆向工程。每周记录的记录数 - Oracle SQL

我所要做的就是统计由呼叫管理表按星期分组的呼叫次数。下面是一些代码的例子,它返回了30,000个条目的计数。如果可能的话,我希望看到这个数字划分为几个星期,也许基于星期五到星期五的范围内的天数?

 
select COUNT(*) from opencall 
where 
trunc(to_date(substr(LOGDATE,1,10), 'DD-MM-YY')) BETWEEN '01-JAN-14' AND '31-DEC-14' 

的关键领域是

 
logdate 

表名是

 
opencall 

所以我可以创建由每周所以

是suppgroup记录的电话号码列表
 
Week  Calls Logged 
Week 1  134 
Week 2  135 
Week 3  189 
... 
... 

所以非常简单,但我可以使用此代码在各种不同的字段上执行搜索以识别某些模式。

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

我这组由数天根本不够用

 
    select COUNT(*), trunc(to_date(substr(LOGDATE,1,10), 'DD-MM-YY'))
from opencall where trunc(to_date(substr(LOGDATE,1,10), 'DD-MM-YY')) BETWEEN '01-JAN-14' AND '31-DEC-14' group by trunc(to_date(substr(LOGDATE,1,10), 'DD-MM-YY')) order by trunc(to_date(substr(LOGDATE,1,10), 'DD-MM-YY'))

希望有人可以提供帮助。

回答

0

为了获取计数的一周,你必须通过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'); 
+0

卓越而辉煌的解决方案。我可以将此作为现在过滤各种字段的众多呼叫的基础。非常感谢。 – 2014-12-08 11:35:26

0

只是从查询中删除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作为日期/时间值存储在数据库中。如果是这样,您不需要将其转换为字符串进行比较。

+0

嘿在那里,谢谢你的贡献。这似乎在抱怨右括号缺失。我尝试添加一个.... ORA-00907:缺少右括号 00907. 00000 - “缺少右括号” *原因: *操作: 错误在行:2列:50 – 2014-12-03 12:21:31

+0

closedate实际上是一个VARCHAR2 (20 BYTE) – 2014-12-03 12:24:46