2014-12-04 3 views
0

다른 날짜의 회원 등록 정보가있는 테이블이 있습니다. 회원 정보를 찾는 쿼리가 필요합니다. 더는 최신 등록 행을 반환하지 않는 경우 네는 그 날짜를날짜 범위를 기준으로 레코드 받기

  • 을 반환하는 경우 사용자가

    • 를 해당 날짜에 등록하거나하지 않을 경우

      는 확인합니다 날짜를 감안할 때.

    결과에 회원이 현재 등록되어 있는지 여부를 보여주는 추가 상태 열이 있습니다. 나는 그것을 CASE 문을 사용하여 계산하고있다.

    여기 각 회원에 대해 최신 정보를 표시하는 쿼리가 있습니다. 나를 진정한 상태로 되돌려 놓을 수 있도록 협조하고 수정하는 데 도움이 필요합니다.

    select * 
    from (
        select id, member_id, enroll_date, end_date, 
        CASE 
         WHEN sysdate between enroll_date and end_date THEN 'Active' 
         ELSE 'Inactive' 
        END 
        Status, 
        row_number() over (partition by member_id order by enroll_date desc) rn 
        from myView 
    )where rn = 1 
    

    테이블 구조는

    ID MEMBER_ID ENROLL_DATE END_DATE 
    01 123456789 01-JAN-13  31-DEC-13 
    02 123456789 01-JAN-06  31-DEC-06 
    03 123456789 01-JAN-11  31-DEC-11 
    04 987654321 01-JAN-08  31-DEC-12 
    05 987654321 01-FEB-13  31-DEC-99 
    06 987654321 01-JAN-13  31-JAN-13 
    

    내가 입력 날짜에 따라 회원의 정보 및 상태를 확인하고 싶습니다. 입력 날짜 후 2005년 1월 1일 경우 입력 2006년 1월 1일 후는주지 말아야 예

    들어

    a) 그것은) 나 01와 05

    01 123456789 01-JAN-13  31-DEC-13  Inactive 
    05 987654321 01-FEB-13  31-DEC-99  Active 
    

    B 줘야 저 02 및 05

    02 123456789 01-JAN-06  31-DEC-06  Inactive 
    05 987654321 01-FEB-13  31-DEC-99  Active 
    

    c) 입력 후 2013년 1월 1일 인 경우 나 01와 06

    01 123456789 01-JAN-13  31-DEC-13  Inactive 
    06 987654321 01-JAN-13  31-JAN-13  Inactive 
    
    01,235,164 줘야

    d)에 입력 한 후 2014년 1월 1일 경우는 이것은 당신이 주어진 맞는 행에 대해 RN = 1을 할당 할 수 있습니다 까다로운 순서입니다 나에게 01 및 05

    01 123456789 01-JAN-13  31-DEC-13  Inactive 
    05 987654321 01-FEB-13  31-DEC-99  Active 
    
  • +0

    날짜를 이해할 수 없습니다. 99 1999 년 또는 2099 년? –

    답변

    1
    select * 
    from (
        select id, member_id, enroll_date, end_date, 
        CASE 
         WHEN sysdate between enroll_date and end_date THEN 'Active' 
         ELSE 'Inactive' 
        END 
        Status, 
        row_number() over (partition by member_id 
             order by case when :input_date between enroll_date and end_date 
               then 1 else 2 end, enroll_date desc) rn 
        from myView 
    )where rn = 1 
    

    을 제공한다 날짜. 그렇지 않으면 최대 등록 날짜가있는 행에 rn = 1이 할당됩니다.

    order by case when :input_date between enroll_date and end_date 
         then 1 else 2 end, enroll_date desc 
    
    +0

    입력 된 날짜 매개 변수는 어디에 있습니까? –

    +0

    @anjibman It 's sysdate – Multisync

    +0

    @anjibman 입력 답변 날짜 – Multisync

    관련 문제