티스토리 뷰


데이터를 쌓아서 어떤 상황에서 최근 100건만 남기고 삭제해야 하는 쿼리를 작성해보았다.

먼저 최근 100건만 가져오는 select 쿼리를 작성하였다.
reg_dt 는 시간을 저장한 컬럼이다.

1
2
3
4
select *
from tb_log_actions
order by reg_dt desc limit 100
 
cs


MIN() 함수는 컬럼값 중 가장 작은 값 하나를 가져오는 함수이다.
reg_dt 는 시간이고, 최근 100건만 남기고 삭제해야 하므로 100건중 가장 작은 값이 결과로 나오게 된다.

1
2
3
4
select min(reg_dt) from (
select reg_dt
from tb_log_actions
order by reg_dt desc limit 100) a
cs


삭제하는 함수는 delete 함수이다.
delete from 테이블명 으로 삭제한다. 
그런데 최근 100건 이하의 데이터는 모두 삭제되어야 하므로 where 조건으로 설정해준다.

1
2
3
4
5
6
delete from tb_log_actions
where reg_dt < (select min(reg_dt) from (
select reg_dt
from tb_log_actions
order by reg_dt desc limit 100) a)
 
cs


Mybatis는 XML에 정의하기 때문에 부등호를 그냥 쓰면 오류가 난다.
<![CDATA[]]>로 감싸주자 !

1
2
3
4
5
6
7
delete from tb_log_actions
    <![CDATA[
        where reg_dt < (select MIN(reg_dt) from (
        select reg_dt
        from tb_log_actions
        order by reg_dt DESC limit 100) a)
    ]]>        
cs


댓글