수익 기여 기간을 기준으로 한 달에 활동중인 고객 수를 얻으라는 요구가 있습니다.날짜 범위의 활성 ID
원본 데이터 :
ACCOUNT_ID REVENUE_START_DATE REVENUE_END_DATE
1234 1/14/2010 0:00 4/13/2010 23:59
4567 2/9/2010 0:00 3/8/2010 23:59
1234 5/9/2010 0:00 6/8/2010 23:59
예상 결과 아래
Month Count
Dec-09 0
Jan-10 1
Feb-10 2
Mar-10 2
Apr-10 1
May-10 1
Jun-10 1
Jul-10 0
Aug-10 0
Sep-10
Oct-10
내가 (구글의 도움으로)에 근무 오라클 코드 그러나 나는 인해 올바른 결과를 얻고 있지 않다 겹치는 날짜. 나는 전문가에게이 일을 도와 줄 것을 요청한다. (미리 감사드립니다)
현재 결과 :
YEAR_ MONTH_ ACT
2010 January 2
2010 February 3
2010 March 3
2010 April 3
오라클 CODE : 그것은 나에게 동안을 촬영하고
with tab as
(
select distinct ACCOUNT_ID, billing_start_date as revenue_start_date, billing_end_date as revenue_end_date
from accounts
),
year_tab as
(
select
add_months(min_date, level -1) m
from
(
select min(trunc(revenue_start_date,'YYYY')) min_date, add_months(max(trunc(revenue_end_date,'YYYY')), 12) max_date
from tab
)
connect by level <= months_between(max_date, min_date)
)
select to_char(m,'YYYY') year_,
to_char(m,'Month') month_,
nvl(act, 0) act
from year_tab,
(
select m date_,count(*) act
from tab, year_tab
where m between trunc(revenue_start_date,'MM') and trunc(revenue_end_date,'MM')
group by m
) month_tab
where m = date_(+)
order by m;
2010 년의 모든 달을 보여줍니다 , 2009 년 12 월 ~ 2009 년 10 월). 질문이 무엇인지 확신 할 수 없습니다 ... 샘플 데이터가 실제로 사용하고 있는지 확신합니까 (컬럼 이름이'탭 '별명을 사용하고 있기 때문에). –
안녕하세요 Alex .. 코드를 검토해 주셔서 감사합니다. 여기서 발견 한 문제는 1 월 10 일에 수익이 계정 ID "1234"에 의해서만 생성되었지만이 쿼리의 결과는 2를 나타내고 2 월에는 계정 ID '1234'에 의해 수익이 생성된다는 것을 알 수 있습니다. 및 "4567"이지만 쿼리에 3이 표시됩니다.나는 이유가 확실하지 않습니다. 제발 저를 도울 수 있습니까? .. – Jay
하지만 3 행의 데이터가있는'accounts' 테이블을 만들 때 쿼리는'1,2,2,1,1,1'을 예상대로 제공합니다. 이 그림에서 뭔가가 누락되었습니다 ... –