반응형
최근 특정 코드별로 쌓이는 테이블을 일정시간마다 호출해서 마지막값을 가져와야 할 일이 생겼다.
여러가지 찾아본 결과는 다음과 같다.
1. order by desc를 통해 select를 해온다.
2. select된 데이터를 한번 더 group by를 한다.
막상 적용해보면 내가 쌓고 있던 테이블의 데이터에서는 group by 후 마지막 날짜의 데이터가 나오지 않았다.
아래와 같은 데이터가 있다고 가정하겠다.
항상 code컬럼의 AAA, BBB, CCC, DDD의 데이터들의 마지막 날짜 데이터들을 가져오는 쿼리를 작성해보겠다.
code컬럼에는 n개가 존재하며 언제나 증가할 수 있다고 가정하고 쿼리를 작성하였다.
아래는 조회에 성공한 쿼리이다.
select
*
from(
select
*
from tb_test
where (code, date_time) in (
select code, max(date_time) as date_time
from tb_test group by code
)
order by date_time desc
) t
group by t.code
먼저 뽑아낼 테이블을 max함수를 통해 마지막 날짜 조회 후 group by를 하고 해당하는 데이터를 조건문에 처리(where 조건문 in절부분)하여 최신 데이터 순으로 order by를 통해 다시 한번 정렬을 한다.
사실 여기까지만 처리해도 정상적으로 볼 수 있지만, 예시데이터처럼 중복된 시:분:초로 들어온 경우 마지막 한개의 데이터가 보장이 되질 않아 마지막에 group by를 한번 더 처리하였다.
아래는 마지막 group by를 안할 경우 발생하는 중복 데이터 노출이다.
처음에 사실 쉽게 처리가 되질 않아 n개의 code값을 group by하여 가져온 후 그 코드값을 where절에 넣고 select를 n번 요청하였는데, 그 방법보단 위 방법이 깔끔한 것 같다.
반응형
'Databases > Mysql' 카테고리의 다른 글
Mysql - 다중행을 단일행으로 출력하기(group_concat) (0) | 2020.04.21 |
---|---|
Mysql - trigger를 활용하여 특정 문자열을 구분하여 INSERT하기(trigger 생성하기) (0) | 2020.02.14 |
Mysql - date_format 사용하기 포맷형태(%Y-%m-%d) (0) | 2020.02.06 |
Mysql - join문을 활용한 update처리 (0) | 2020.01.22 |
Mysql - Insert하는 데이터의 PK값이 있으면 update 처리하기 ON DUPLICATE KEY UPDATE (0) | 2020.01.21 |