2017-05-11 1 views
-2

매년 날짜까지 요금이 부과되는 계정이 있다고 가정 해 보겠습니다.날짜가있는 SQL 작업

따라서 각 청구에 대해 날짜를 언급하는 테이블에서 행이 생성됩니다. 불행히도, 어떤 이유로 인해 특정 연도에 요금이 부과되지 않아 해당 연도에 행이 생성되지 않습니다.

내 목표는 요금이 누락 된 계정과 그 해를 찾는 것입니다.

+1

테이블의 구조는 무엇이며 현재 작동하지 않는 쿼리는 무엇입니까? –

+0

acctno chargetype 일 1 XYZ 20-01-2014 1 ABC 20-01-2015 1 XYZ 20-01-2017 2 XYZ 20-01-2015 2 XYZ 20-01-2016 2 XYZ 20-01 -2017 –

+0

** 귀하의 질문에 ** 샘플 데이터를 추가하고 해당 데이터를 기반으로 예상되는 결과를 추가하십시오. [** 포맷 된 텍스트 **] (http://stackoverflow.com/help/formatting)하시기 바랍니다. [스크린 샷 없음] (http://meta.stackoverflow.com/questions/285551/why-may-i-not -upload-images-of-code-on-so-ask-a-question/285557 # 285557). 부적절한 질문에 대한 자세한 답변은 –

답변

0

아래 해결 방안에는 누락 된 지급 기간이 있지만 테이블에 지불 한 기간이 표시됩니다. 이 아니며 첫해에 지불이 누락되거나 수령하지 않은 지불을받지 못했습니다. 예를 들어 지불액이 2010-2016 년이었고 표에 2012 년, 2013 년, 2015 만 표시되는 경우 솔루션은 2014 년을 발견하지만 2010 년, 2011 년 및 2016 년은 찾지 않습니다. 귀하의 테이블에있는 데이터는 누락 된 지불액을 찾기에 충분하지 않습니다. 또한 계정에 지불금이 있었어야하지만 이 아닌 결제액이없는 경우 해당 계정은 테이블에 전혀 존재하지 않으므로 솔루션에서 해당 계정을 찾을 수 없습니다.

with 
    test_data (acctno, chargetype, dt) as (
     select 1, 'xyz', to_date('20-01-2014', 'dd-mm-yyyy') from dual union all 
     select 1, 'abc', to_date('20-01-2015', 'dd-mm-yyyy') from dual union all 
     select 1, 'xyz', to_date('20-01-2017', 'dd-mm-yyyy') from dual union all 
     select 2, 'xyz', to_date('20-01-2015', 'dd-mm-yyyy') from dual union all 
     select 2, 'xyz', to_date('20-01-2016', 'dd-mm-yyyy') from dual union all 
     select 2, 'xyz', to_date('20-01-2017', 'dd-mm-yyyy') from dual 
    ) 
-- End of test data (not part of the solution) 
-- Query begins below this line; use your actual table name instead of "test_data" 
select acctno, min_year + level - 1 as yr 
from (
     select acctno, 
        min(extract(year from dt)) min_year, 
        max(extract(year from dt)) max_year 
     from  test_data 
     group by acctno 
     ) 
where (acctno, min_year + level - 1) not in (select acctno, extract(year from dt) 
               from test_data 
              ) 
connect by level <= max_year - min_year + 1 
     and prior acctno = acctno 
     and prior sys_guid() is not null 
; 

ACCTNO YR 
------ ---- 
    1 2016 
+0

명성에 코드 또는 추가 정보를 게시하지 마십시오. – unleashed

관련 문제