MAX 함수가 안먹히는거 같은데 원인이 뭘까요 ㅠㅠ 0 9 435

by 꼰복 [SQL Query] [2018.03.09 08:53:47]


결과.PNG (2,589Bytes)

SELECT 
        MAX(컬럼) KEEP(DENSE_RANK FIRST ORDER BY 기준이되는 컬럼값 DESC) AS OLDDATA,
         MAX(컬럼) KEEP(DENSE_RANK FIRST ORDER BY기준이되는 컬럼값 DESC) AS NEWDATA

         ,MAX(기준이되는 컬럼값) AS DATASEQ
FROM 테이블

WHERE 조건

이런식으로 MAX함수 사용했는데도 출력되는 로우가 2줄이 나오는데 제가 잘못 사용하고 있는건가요?ㅠㅠ

DATASEQ가 2인것만 뽑고 싶은데, 1인것도 같이 나오네요..결과값은 첨부로 넣겠습니당 ㅠㅠ

 

by 춤과파티 [2018.03.09 08:56:57]

DATASEQ 컬럼을 MAX함수 빼고 GROUP BY DATASEQ 하신담에 HAVING절에서 조건을 주는건 어떨까요?


by 꼰복 [2018.03.09 09:07:08]

답변감사드립니다!

HAVING 절에 어떤 조건을 줘야될까요?ㅠ

DATASEQ 값이 얼마가 될지 몰라서, 그 중에 가장 큰 값의 로우만 출력하고 싶어서요 ㅠㅠ HAVING 절에 ' > 1 ' 이렇게 얼마보다 크다 이런 조건말고 최대값을 출력할수 있게 하는 조건이 있나용??ㅠ


by 우리집아찌 [2018.03.09 09:04:35]

DATASEQ 가 2인데 MAX는 왜하시죠?

두개 이상이신건가요? 그럼 GROUP BY 를 추가해주세요.

WHERE 조건은 주신건가요?


by 꼰복 [2018.03.09 09:08:29]

답변감사합니다~!

네네 같은 키 값에 대한 로우가 2개 이상 나오는 경우가 있습니당 같은 키값의 데이터들이 계쏙 저장되게 되면 DATASEQ가 1씩 증가해서 몇개가 될지 모릅니당..그래서 가장 마지막에 데이터가 저장된 (DATASEQ이 가장 높은) 데이터를 뽑고 싶거든요 ㅠㅠ

GROUP BY도 WHERE절에도 모두 조건을 준 상태입니다 ㅠㅠ쿼리 모두 공개 못한점 죄송합니다


by 우리집아찌 [2018.03.09 09:10:27]

ROW_NUMBER() OVER() 를 한번 써보세요.

 


by 꼰복 [2018.03.09 15:45:38]

답변감사합니다! 추천해주신 방법도 가능한거같네요! 하지만 제가 원하는 답은 출력못했습니다 ㅠㅠ그래도 답변 감사합니다~! 많이 배웠습니다!


by 마농 [2018.03.09 09:37:53]

질문의 쿼리로는 두줄이 나올 리가 없습니다.
두줄이 나온 쿼리에는 Group By 구문이 들어 있겠죠.
Group By 제거하시면 한줄로 나올 것입니다.


by 꼰복 [2018.03.09 15:46:00]

오...감사합니다 마농님!

해결이 됐어요! GROUP BY가 문제였군요..!!!! 감사합니다!


by 마농 [2018.03.12 08:24:01]

항목이 몇개 안되면 KEEP 을 사용해도 되지만
항목이 많으면 ROW_NUMBER 를 이용하시는게 더 편리합니다..
 

SELECT *
  FROM (SELECT c1, c2, c3
             , ROW_NUMBER() OVER(ORDER BY c3 DESC) rn
         WHERE ...
        )
 WHERE rn = 1
;

 

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