뿌뿌아빠
90
2020-11-25 10:04:50
3
121

Mysql 날짜를 조건으로 조인하여 데이터 뿌려주기 질문이 있어요


현재 Result 테이블에 날짜별로 데이터가 있습니다


date, num, time

2020-11-17, 1, 0.5

2020-11-17, 2, 0.5

2020-11-17, 3, 0.5

2020-11-18, 1, 0.5

2020-11-18, 2, 0.5

2020-11-18, 3, 0.5

2020-11-19, 1, 0.5

2020-11-19, 2, 0.5

2020-11-19, 3, 0.5

2020-11-20, 1, 0.5

2020-11-20, 2, 0.5

2020-11-20, 3, 0.5

2020-11-23, 1, 0.5

2020-11-23, 2, 0.5

2020-11-23, 3, 0.5


이런 식으로 계속 쌓이고 있는데,


날짜를 기준으로 기준일 이전 일주일까지 날짜별로 아래와 같이 데이터를 뿌려주고 싶습니다.


2020-11-17, 1, 0.5 

2020-11-18, 1, 0.5

2020-11-19, 1, 0.5

2020-11-20, 1, 0.5

2020-11-21, 0, 0

2020-11-22, 0, 0

2020-11-23, 1, 0.5

2020-11-17, 2, 0.5 

2020-11-18, 2, 0.5

2020-11-19, 2, 0.5

2020-11-20, 2, 0.5

2020-11-21, 0, 0

2020-11-22, 0, 0

2020-11-23, 2, 0.5


날짜 순서대로 돌아가면서 정렬하되, num 숫자를 group 으로 묶는 게 아니라 그저 선택된 순서대로 나오게 하고 싶고, 조회 기간 내 데이터가 없는 날짜는 row가 존재하지 않으나, 날짜 row를 생성하고 num과 time 컬럼의 값은 0으로 찍어서 리턴하고 싶습니다.

며칠 고민해도 답이 안나오네요.. 조그만 힌트라도 주시면 감사드리겠습니다


0
  • 답변 3

  • beck1111
    753
    2020-11-25 11:16:51

    num 숫자를 group 으로 묶는 게 아니라 그저 선택된 순서대로 나오게

    조회 기간 내 데이터가 없는 날짜는 row가 존재하지 않으나, 날짜 row를 생성하고 num과 time 컬럼의 값은 0으로 찍어서 리턴하고 싶습니다.

    outer join 하고 날짜로 order by만 하시면 안되나요?

    뭘 하시려는지 잘 이해하지는 못했으나 윗 글만 봐서는 말이죠

  • 밤아홉시
    433
    2020-11-25 17:22:13

    1. 기준일부터 일주일전까지 날짜를 출력하는 select문 작성

    2. 1번을 from절 서브쿼리에 넣고 

    3. left join으로 실제 테이블에서 date 값이 같은 데이터를 ifnull해서 가져오면 될 것 같습니다.

    대략 이런 모습이 될 것 같네요.

    select A.dt AS 'date', ifnull(B.num, 0) AS 'num', ifnull(B.time, 0) AS 'time'

    from (select ... ) A

    left join (select dt, num, time from table_name group by dt) B on B.dt = A.dt

  • beck1111
    753
    2020-11-27 03:19:41

    데이터가 없는날은 row자체가 없다는걸 이해 못했네요

    윗분 말씀대로 날짜는 수동으로 만드신 후 조인 하는게 맞는거 같네요


  • 로그인을 하시면 답변을 등록할 수 있습니다.