2016. 5. 20. 19:59ㆍ프로그래밍/MySQL
문제 : 랭킹 데이블에서 사용자 ID의 랭킹을 구한다. 단 동점자의 경우 등록 일시에 따라서 빠른 경우 높은 등수로 처리한다.
랭킹 정보는 매주마다 초기화 됩니다.
매주 일요일 00:00:00마다 새로운 주가 시작됩니다.
(write_date>'2016-05-15 00:00:00' and write_date<'2016-05-21 23:59:59')
그리고 period, keyword, app_id, visibility는 상황에 따라서 다양하게 추가하시면 됩니다.
해결 방법 :
SELECT * from (
SELECT *, @rownum := @rownum + 1 AS rank from rank_info, (SELECT @rownum := 0) r WHERE
(period=20 and
(keyword='World' and
(app_id=102 and
((write_date>'2016-05-15 00:00:00' and write_date<'2016-05-21 23:59:59') and (score >= 219 and visibility=1)))))
ORDER BY score DESC, write_date
) as result WHERE uniq_id='M28FD83X'
다양한 분야의 개발을 하다보니 DB설계부터 개발도 하게됬습니다.
위 쿼리가 최선은 아닐수 있습니다. 각자의 환경에 따라서 최적의 쿼리를 개발하시기 바랍니다.
'프로그래밍 > MySQL' 카테고리의 다른 글
일일 누적되는 로그테이블에서 DAU수를 구하기 위한 SQL문 (0) | 2016.11.15 |
---|---|
테이블에서 일정 개수 이후의 ROW를 모두 삭제하기 (0) | 2016.09.12 |
특정 그룹에서 나의 랭킹(순위) 구하기 (0) | 2016.01.11 |