>

ID와 monthid라는 두 개의 열이 있습니다.

내가 찾고있는 결과는 분기를 기준으로 월 ID에서 연도를 나누는 것입니다. 출력 열은 분기에서 가져와야합니다. id가 활성화 된 경우 출력은 1이고 0이어야합니다. id가 1 분기 중 하나에 들어 오면 (예 : 1) 출력은 여전히 ​​1입니다.

이것처럼 :

id           month
-----------------------------------
100   2012-03-01 00:00:00.0
100   2015-09-01 00:00:00.0
100   2016-10-01 00:00:00.0
100   2015-11-01 00:00:00.0
100   2014-01-01 00:00:00.0
100   2013-04-01 00:00:00.0
100   2014-12-01 00:00:00.0
100   2015-02-01 00:00:00.0
100   2014-06-01 00:00:00.0
100   2013-01-01 00:00:00.0
100   2014-05-01 00:00:00.0
100   2016-05-01 00:00:00.0
100   2013-07-01 00:00:00.0

결과는 다음과 같아야합니다.

ID    YEAR     QTR      output (1 or 0)
--------------------------------------------------
100   2012      1          1
100   2012      2          0
100   2012      3          0
100   2012      4          0
100   2013      1          1
100   2013      2          1
100   2013      3          1
100   2013      4          0

아래는 내가 시도했지만 예상 결과를 반환하지 않습니다. 출력값을 0으로 설정하고 싶습니다.

select a.id,a.year,a.month,
CASE WHEN a.month BETWEEN 1 AND 4 THEN 1 
 ELSE 0 END as output
from
(select id,trim(substring(claim_month_id,1,4)) as year,(INT((MONTH(monthid)-1)/3)+1) as month from test) a
group by a.id,a.year,a.month

도움을 주시면 감사하겠습니다.

  • 답변 # 1

    @ 애니;Hive에는 4 쿼터 (1,2,3,4)를 만들 수있는 계층 적 쿼리가 없으므로 작은 테이블을 만듭니다. 그런 다음 ims_patient_activity_diagnosis 테이블에 존재하는 모든 patient_id, 연도 및 월을 얻습니다. 마지막으로, 가능한 모든 환자 ID, 연도 및 분기 (1,2,3,4)에 대해 올바른 참여를했습니다. ID 또는 연도 또는 분기가 올바른 조인에 존재하지 않으면 해당 ID, 연도 및 분기에 대한 활동이 없습니다. 해당 행에 activity = 0을 할당합니다. 또한 환자 ID = 200을 삽입하여 테이블에 환자 ID가 더 있는지 테스트했습니다. 이것이 도움이되기를 바랍니다. 감사합니다.

    create table dbo.qtrs(month int);
    insert into qtrs  values (1),(2),(3),(4);
    select DISTINCT NVL(ims.id, qtr.id) as patient_id,
    qtr.year as year,
    qtr.month as month,
    CASE WHEN ims.id > 0 THEN 1 ELSE 0 END as activity  
    from sandbox_grwi.ims_patient_activity_diagnosis ims
    right join (select distinct ims.id,YEAR(ims.month_dt) as year,qtrs.month from sandbox_grwi.ims_patient_activity_diagnosis ims join dbo.qtrs qtrs) qtr 
    on (ims.id=qtr.id and YEAR(ims.month_dt)=qtr.year and INT((MONTH(month_dt)-1)/3)+1=qtr.month)
    sort by patient_id, year, month;
    Sample Result:
    p_id    year    month   activity
    100     2012    1       1
    100     2012    2       0
    100     2012    3       0
    100     2012    4       0
    100     2013    1       1
    100     2013    2       1
    100     2013    3       1
    100     2013    4       0
    100     2014    1       1
    100     2014    2       1
    100     2014    3       0
    100     2014    4       1
    100     2015    1       1
    100     2015    2       0
    100     2015    3       1
    100     2015    4       1
    100     2016    1       0
    100     2016    2       1
    100     2016    3       0
    100     2016    4       1
    200     2012    1       1
    200     2012    2       0
    200     2012    3       0
    200     2012    4       0
    200     2013    1       0
    200     2013    2       1
    200     2013    3       0
    200     2013    4       0
    
    additional sample data:
    insert into sandbox_grwi.ims_patient_activity_diagnosis values
    (200, '2012-03-01'), 
    (200, '2013-04-01');
    
    

  • 이전 javascript - 경고 - 실패한 소품 유형 : '이미지'에 잘못된 소품`소스 '가 제공되었습니다
  • 다음 mysql - sql 조인 - 중첩 sql이 필요할 수 있음