получить среднее число дней, когда проблема открыта - PullRequest
0 голосов
/ 01 марта 2012

У меня есть таблица со столбцом «дата открытия звонка» (actual_log_date), которую я конвертирую, используя

convert(char(10), actual_log_date, 103) 'Call Logged'

для отображения вызовов, зарегистрированных на 01/02/2012, например.

Существует также столбец времени закрытия (close_time), для которого я запускаю то же преобразование,

convert(char(10), close_time, 103) 'Call Closed' 

для отображения вызовов, закрытых 12/02/2012.

Теперь мне нужно создать сценарий, чтобы узнать среднее количество дней, в течение которых звонки были открыты. Я могу запустить

(select datediff(dd, c.actual_log_date, c.close_time)) as 'Days Open' 

чтобы создать столбец, который показывает, что вызов был открыт в течение 12 дней или что-то еще, но теперь нужно посчитать все записи и получить среднюю сумму в конце результатов, где я застрял!

Я забыл сказать, что не могу создать временную таблицу, поскольку у меня есть только права на чтение.

Извините, я новичок здесь, поэтому не уверен в протоколе, но вот сценарий, если легче ответить, увидев, с чем я работаю;

select 

convert(char(10),actual_log_date,103) 'Call Logged',
call_number 'Call #', 
short_problem 'Issue Description',
Customer = (select surname + ', ' + first_name from i.ar_user_attributes where ref = user_ref ),
Officer  = (select surname + ', ' + first_name from i.su_help_centre where ref = resolve_officer),
Department = (select name from i.su_support_group where ref = resolve_group),
convert(char(10),close_time,103) 'Closed',
(select datediff(hh,c.actual_log_date,c.close_time)) as 'Hours Open',
(select datediff(dd,c.actual_log_date,c.close_time)) as 'Days Open'

from 
i.cl_call_logging c

where 
c.resolve_time between
convert(datetime,convert(varchar,month(dateadd(m,-1,getdate()))) + '/01/' + convert(varchar,year(dateadd(m,-1,getdate())))) and
convert(datetime,convert(varchar,month(getdate())) + '/01/' + convert(varchar,year(getdate())))
and c.resolve_group in ('48', '60')

Еще раз спасибо!

1 Ответ

0 голосов
/ 01 марта 2012

Вы можете использовать с запросом, как это:

insert into @temp (CallOpen, CallClosed)
values
('2012-01-02', '2012-02-12'),
('2012-01-05', '2012-02-12'),
('2012-01-07', '2012-02-05'),
('2012-01-14', '2012-02-03'),
('2012-02-10', '2012-03-15')

;with T1 as 
(
select
    CallOpen,
    CallClosed,
    DATEDIFF(dd, callopen, callclosed) as DaysOpen
from @temp
)

select AVG(daysopen) from T1

Используя ваш полный скрипт, попробуйте это:

;with T1 as
(
select 
    convert(char(10),actual_log_date,103) 'Call Logged',
    call_number 'Call #', 
    short_problem 'Issue Description',
    Customer = (select surname + ', ' + first_name from i.ar_user_attributes where ref = user_ref ),
    Officer  = (select surname + ', ' + first_name from i.su_help_centre where ref = resolve_officer),
    Department = (select name from i.su_support_group where ref = resolve_group),
    convert(char(10),close_time,103) 'Closed',
    (select datediff(hh,c.actual_log_date,c.close_time)) as 'Hours Open',
    (select datediff(dd,c.actual_log_date,c.close_time)) as 'Days Open'
from @cl_call_logging c
where 
    c.resolve_time between
        convert(datetime,convert(varchar,month(dateadd(m,-1,getdate()))) + '/01/' + convert(varchar,year(dateadd(m,-1,getdate())))) and
        convert(datetime,convert(varchar,month(getdate())) + '/01/' + convert(varchar,year(getdate())))
    and c.resolve_group in ('48', '60')
)

select AVG([Days Open]) from T1
...