[mysql] select 를 하는 경우 max() 조건으로 query 결과값 변경이 가능한 지 궁금합니다. 0 4 1,211

by tosswin [SQL Query] mysql max query select [2022.05.24 15:36:46]


안녕하세요. 매번 들어와서 볼 때마다 대단하심을 느끼고 있습니다.

시작한지 얼마되지 않은데, 도저히 해결하지 못하는 것이 생겨 이렇게 질문을 드립니다.

 

테이블은 다음과 같습니다.

currentdatetime tNum Cnt1 Cnt2 Cnt3
2022-04-01 16:17:47 0 1 200 50
2022-05-24 12:23:34 1 100 120 70
2022-04-01 16:17:47 2 10 150 80

위와 같은 상태에서

Select 할 때

max(currentdatetime) 보다 작은 행에 대해서

Cnt1, Cnt2, Cnt3 를 0 으로 변경하고 싶습니다.

구현하고 싶은 테이블은 아래와 같습니다.

currentdatetime tNum Cnt1 Cnt2 Cnt3
2022-05-24 12:23:34 0 0 0 0
2022-05-24 12:23:34 1 100 120 70
2022-05-24 12:23:34 2 0 0 0

 

읽어봐주시고 생각해주셔서 감사합니다.

 

by 마농 [2022.05.24 16:14:24]

MySQL 버전이 어떻게 되나요?
- 분석함수 OVER 구문 이용 가능 버전인지?
조회 결과 일시가 모두 동일한데? 결과가 이게 맞는지?


by tosswin [2022.05.24 16:40:57]

제가 DB 를 사용한 지 얼마되지 않아서 제대로 된 답변을 드리는 지 모르겠습니다.

mariaDB 10.3.3.4 버전이고요.

communitiy version 이라 over 구문 이용은 여부는 정확히 모르고 있습니다. -_-;

 


by 마농 [2022.05.24 17:29:50]
WITH t AS
(
SELECT '2022-04-01 16:17:47' currentdatetime, 0 tNum, 1 Cnt1, 200 Cnt2, 50 Cnt3
UNION ALL SELECT '2022-05-24 12:23:34', 1, 100, 120, 70
UNION ALL SELECT '2022-04-01 16:17:47', 2,  10, 150, 80
)
SELECT MAX(currentdatetime) OVER() currentdatetime
     , tNum
     , CASE currentdatetime WHEN MAX(currentdatetime) OVER() THEN Cnt1 ELSE 0 END Cnt1
     , CASE currentdatetime WHEN MAX(currentdatetime) OVER() THEN Cnt2 ELSE 0 END Cnt2
     , CASE currentdatetime WHEN MAX(currentdatetime) OVER() THEN Cnt3 ELSE 0 END Cnt3
  FROM t
;

 


by tosswin [2022.05.25 15:30:38]

감사합니다. 마농님.

가르쳐주신대로 적용하니 너무 잘 됩니다.

많은 시간을 벌게 해주셔서 감사합니다.

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