используя avg, group by и case вместе - db2 - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть следующий рабочий код для возврата каждой комбинации местоположения, состояния и месяца.

select *
from openquery (jw,'
select distinct a.location, a.state, a.monthyear
from (
    select clm.location, clm.state,
    case 
        when EFDT>=''2017-09-01'' and EFDT<=''2017-09-30'' Then ''Sept 2017''
        when EFDT>=''2017-10-01'' and EFDT<=''2017-10-31'' Then ''Oct 2017''
        when EFDT>=''2017-11-01'' and EFDT<=''2017-11-30'' Then ''Nov 2017''
        when EFDT>=''2017-12-01'' and EFDT<=''2017-12-31'' Then ''Dec 2017''
        when EFDT>=''2018-01-01'' and EFDT<=''2018-01-31'' Then ''Jan 2018''
        when EFDT>=''2018-02-01'' and EFDT<=''2018-02-28'' Then ''Feb 2018''
        when EFDT>=''2018-03-01'' and EFDT<=''2018-03-31'' Then ''March 2018''
        when EFDT>=''2018-04-01'' and EFDT<=''2018-04-30'' Then ''April 2018''
        when EFDT>=''2018-05-01'' and EFDT<=''2018-05-31'' Then ''May 2018''
        when EFDT>=''2018-06-01'' and EFDT<=''2018-06-30'' Then ''June 2018''
        when EFDT>=''2018-07-01'' and EFDT<=''2018-07-31'' Then ''July 2018''
        when EFDT>=''2018-08-01'' and EFDT<=''2018-08-31'' Then ''Aug 2018''
        when EFDT>=''2018-09-01'' and EFDT<=''2018-09-30'' Then ''Sept 2018''
        when EFDT>=''2018-10-01'' and EFDT<=''2018-10-31'' Then ''Oct 2018''
        when EFDT>=''2018-11-01'' and EFDT<=''2018-11-30'' Then ''Nov 2018''
        when EFDT>=''2018-12-01'' and EFDT<=''2018-12-31'' Then ''Dec 2018''
        ELSE ''null''
    END as monthyear
    from alias.table1 clm
    where ....
) a
group by location, state, monthyear
order by monthyear
with ur')

Теперь я пытаюсь добавить AVG, чтобы получить среднее время для каждой комбинации,код будет:

avg(days(LSDT)-days(EFDT))

как я могу использовать AVG в сочетании с группой по и в случае?Любой совет приветствуется.Мне нужно показать среднее время между этими двумя датами для каждой комбинации канала, штата и месяца.

1 Ответ

0 голосов
/ 04 декабря 2018

Попробуйте это:

select location, state, monthyear, avg(days(LSDT)-days(EFDT)) as days
from (
select clm.location, clm.state, clm.lsdt, clm.efdt
, case 
    when EFDT between date('2017-09-01') and date('2018-12-31') then to_char(EFDT, 'Mon')||' '||year(EFDT) 
    else 'null' 
  end monthyear
from alias.table1 clm
)
group by location, state, monthyear
order by monthyear;
...