2017-12-15 3 views
0

ID가 서로 다른 테이블이 있습니다. 날짜 필드와 '없음', '낮음', '보통', '높음'과 같은 값이있는 필드 제목 RISK가 있습니다. 그것은 다음과 같습니다case 문을 사용하여 다른 행의 값을 할당하려면 어떻게해야합니까?

ID Date Risk 
    1743333 12/1/2017 Low 
    1743333 12/2/2017 Low 
    1743333 12/3/2017 None 
    1743333 12/4/2017 None 
    1743333 12/5/2017 Medium 
    1743333 12/6/2017 High 
    1265464 12/1/2017 High 
    1265464 12/2/2017 None 
    1265464 12/3/2017 None 
    1265464 12/4/2017 None 
    1265464 12/5/2017 High 
    1265464 12/6/2017 High 

위험 필드는 내가 가지고있는 나에 대한 기준이 정확히 모르는 다른 데이터 포인트와 코드의 계산에 의해 만들어집니다. '없음'값은 계산 기준에 따라 낮음, 중간 또는 높음을 할당하는 데 필요한 정보가 충분하지 않을 때 기본적으로 할당됩니다. 내가하려는 일은, RISK = 'None'의 값이있는 곳에서, 그 이전의 행의 RISK 값을 그 특정 ID 내의 이전 날짜 (1 일 이전)에 기초하여 할당하고 싶습니다. 따라서 특정 날짜에 RISK가 'None'이외의 항목으로 표시되고 일일 진행으로 'None'이되면 이전의 최신 'None'값을 유지하려고합니다.

ID Date Risk 
1743333 12/1/2017 Low 
1743333 12/2/2017 Low 
1743333 12/3/2017 Low 
1743333 12/4/2017 Low 
1743333 12/5/2017 Medium 
1743333 12/6/2017 High 
1265464 12/1/2017 High 
1265464 12/2/2017 High 
1265464 12/3/2017 High 
1265464 12/4/2017 High 
1265464 12/5/2017 Medium 
1265464 12/6/2017 High 

내가 익숙하지 않다,하지만 난 변수 할당과 행을 반복에 대해 생각했다 : 새로운 표는이처럼 보이는 끝낼 것입니다. 나는 MySQL을 사용하고 있으며 이것을 case 문에 구현하려고하므로 기존 테이블의 새로운 필드에 결과를 할당 할 수있다. MySQL에서 동일한 테이블을 참조하거나 다시 참여하는 것과 관련하여 문제가 발생했습니다. 긴 게시물에 미리 감사 드리며 유감스럽게 생각합니다.

+0

몇 가지 코드를 보여주십시오. 우리는 당신이 나쁜 코드를 수정하도록 돕기 위해 여기에 있습니다. – Forbs

+0

'case expressions'은 행 전체가 아니라 현재 행에서만 작동합니다 (nb는 "case 문"이 아닙니다). –

답변

0

날짜 차이를 사용하는 자체 조인은 다음과 같이 수행 할 수 있습니다. 그러나 결과에서 '없음'이 여전히 발생한다는 점에 유의하십시오.

SQL Fiddle

MySQL을 5.6 스키마 설정 :

CREATE TABLE Table1 
    (`ID` int, `Date` datetime, `Risk` varchar(6)) 
; 

INSERT INTO Table1 
    (`ID`, `Date`, `Risk`) 
VALUES 
    (1743333, '2017-12-01 00:00:00', 'Low'), 
    (1743333, '2017-12-02 00:00:00', 'Low'), 
    (1743333, '2017-12-03 00:00:00', 'None'), 
    (1743333, '2017-12-04 00:00:00', 'None'), 
    (1743333, '2017-12-05 00:00:00', 'Medium'), 
    (1743333, '2017-12-06 00:00:00', 'High'), 
    (1265464, '2017-12-01 00:00:00', 'High'), 
    (1265464, '2017-12-02 00:00:00', 'None'), 
    (1265464, '2017-12-03 00:00:00', 'None'), 
    (1265464, '2017-12-04 00:00:00', 'None'), 
    (1265464, '2017-12-05 00:00:00', 'High'), 
    (1265464, '2017-12-06 00:00:00', 'High') 
; 

검색어 1 :

select 
     t.*, prev.risk as prev_risk 
from table1 as t 
inner join table1 as prev on t.id = prev.id and t.date = prev.date + interval 1 day 
where t.risk = 'none' 

Results :

|  ID |     Date | Risk | prev_risk | 
|---------|----------------------|------|-----------| 
| 1743333 | 2017-12-03T00:00:00Z | None |  Low | 
| 1743333 | 2017-12-04T00:00:00Z | None |  None | 
| 1265464 | 2017-12-02T00:00:00Z | None |  High | 
| 1265464 | 2017-12-03T00:00:00Z | None |  None | 
| 1265464 | 2017-12-04T00:00:00Z | None |  None | 
관련 문제