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 |
읽어봐주시고 생각해주셔서 감사합니다.
MySQL 버전이 어떻게 되나요?
- 분석함수 OVER 구문 이용 가능 버전인지?
조회 결과 일시가 모두 동일한데? 결과가 이게 맞는지?
제가 DB 를 사용한 지 얼마되지 않아서 제대로 된 답변을 드리는 지 모르겠습니다.
mariaDB 10.3.3.4 버전이고요.
communitiy version 이라 over 구문 이용은 여부는 정확히 모르고 있습니다. -_-;
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
;
감사합니다. 마농님.
가르쳐주신대로 적용하니 너무 잘 됩니다.
많은 시간을 벌게 해주셔서 감사합니다.