2016. 9. 12. 11:22ㆍ프로그래밍/MySQL
문제 : 특정 테이블에서 마지막에 저장되었던 ROW 5개를 제외한 나머지들은 등록된 날짜 순으로 정렬해서 삭제하기. (항상 최신 정보만을 유지 하기 위해서 사용됩니다.)
SQL전문가는 아닙니다.
하지만 DB관련 작업을 뛰엄뛰엄 오래동안 하다보니 필요한것은 최대한 배우면서 개발하고 있습니다.
이번에도 저장파일을 서버에 등록하고 관리하는 기능을 추가하는 과정에서 Client는 무조건 서버에 저장을 하고 서버는 무한히 늘어나는 것을 방지하기 위해서 최근 저장된 파일 5개만 남기도록 하였습니다 그리고 그 이후로는 모두 삭제됩니다. 그리고 각 저장 파일들은 버전으로 관리됩니다. 동일한 버전 번호는 Update되고 새로운 버전 번호일 경우에는 Insert됩니다.
DELETE table_savedata
FROM table_savedata
INNER JOIN (
SELECT write_date, @rn := @rn + 1 AS rn
FROM table_savedata
CROSS JOIN (SELECT @rn := 0) AS var
WHERE sns_id= '소셜아이디 또는 사용자 아이디' and keyword='저장파일의 구분을 위한 키워드'
ORDER BY write_date DESC)
AS t ON table_savedata.write_date = t.write_date AND t.rn >= 5
최적화 여부는 아직은 정확하지 않습니다. 다른 방법을 찾아보시면 더욱 좋은 SQL문장들이 있지 않을까 싶습니다. 하지만 일단은 정상적으로 원하는 방법을 수행할수 있어서 활용 중입니다.
또한 SQL 전문가 분들이 보시기에 잘못 사용중인 부분이 보이시면 의견 남겨주시기 바랍니다.
추석이 며칠 남지 않았는데 모든 개발자분들도 즐거운 개발하시기 바랍니다.
좋은 하루되세요.
'프로그래밍 > MySQL' 카테고리의 다른 글
일일 누적되는 로그테이블에서 DAU수를 구하기 위한 SQL문 (0) | 2016.11.15 |
---|---|
내 등수 구하기(동점자 처리 포함) (0) | 2016.05.20 |
특정 그룹에서 나의 랭킹(순위) 구하기 (0) | 2016.01.11 |