초보 서브쿼리 질문입니다. 0 5 810

by 임태원 [MySQL] [2016.12.26 14:45:12]


안녕하세요 공부 도중 궁금한것이 있어 남깁니다. 여기 아주 훌륭한 고수분들이 많다 셔서...

 

테이블이 다음과 같이 구성되어 있습니다.

가게명 사장이름 매출예측계산월 매출예측해당월    금액                      -칼럼에

    a1       b1         201609             201610       100만원

    a1       b1         201608             201610        90만원

    a1       b1         201609             201611       105만원

    a1       b1         201610             201611        90만원

 

이렇게 구성이 되어 있다면 밑줄친 부분인 최종매출계산월만 가져 와서. 테이블을 새로 구성하려고 합니다.

select 매출예측해당월, max(매출예측계산월) from table 을 통해 아래와 같이 나올경우

 

매출예측계산월  매출예측해당월      

 201609              201610

 201610              201611

다시 최종 예측 해당월에 대한 값인 금액을 불러오고 싶습니다.

최종 )

    a1       b1         201609             201610       100만원

    a1       b1         201610             201611        90만원

 

더 쉬운 방법이 있으면 조언 부탁드립니다.

 

by 우리집아찌 [2016.12.26 15:15:53]

mysql은 잘몰라서 분석함수가 안되면 조건절에 in절로 푸셔야핤힞니다


by 랑에1 [2016.12.26 15:16:20]
WITH T(가게명, 사장이름, 매출예측계산월, 매출예측해당월, 금액) AS (
SELECT 'a1', 'b1', '201609', '201610', 100 FROM dual UNION ALL 
SELECT 'a1', 'b1', '201608', '201610', 90 FROM dual UNION ALL 
SELECT 'a1', 'b1', '201609', '201611', 105 FROM dual UNION ALL 
SELECT 'a1', 'b1', '201610', '201611', 90 FROM dual
)

SELECT 가게명, 사장이름, 매출예측계산월, 매출예측해당월, 금액
FROM 
(
  SELECT T.*, ROW_NUMBER() OVER(PARTITION BY 가게명, 사장이름, 매출예측해당월 ORDER BY 매출예측계산월 desc) rn
  FROM T
)
WHERE rn = 1

이런 결과를 원하시는건가요? 

 


by 랑에1 [2016.12.26 15:17:04]

아 mysql 이였군요;;


by 임태원 [2016.12.26 15:29:24]

아 감사합니다.
row_number로 가능한 부분 이군요. 좋은정보 배워 갑니다.

 


by 마농 [2016.12.26 15:27:52]
SELECT a.*
  FROM 테이블 a
  LEFT OUTER JOIN 테이블 b
    ON a.가게명        = b.가게명
   AND a.매출예측해당월 = b.매출예측해당월
   AND a.매출예측계산월 < b.매출예측계산월
 WHERE b.가게명 IS NULL
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입