-- 1. 테스트용 테이블 생성 -- CREATE TABLE race_fish AS SELECT 1 user_index, 9 fish_size, '13:00' create_date UNION ALL SELECT 1, 8, '12:00' UNION ALL SELECT 1, 9, '11:00' UNION ALL SELECT 2, 6, '13:00' UNION ALL SELECT 2, 7, '12:00' UNION ALL SELECT 2, 8, '11:00' UNION ALL SELECT 3, 8, '13:00' UNION ALL SELECT 3, 7, '12:00' UNION ALL SELECT 3, 6, '11:00' UNION ALL SELECT 4, 7, '13:00' UNION ALL SELECT 5, 6, '11:00' UNION ALL SELECT 6, 6, '11:01' UNION ALL SELECT 7, 5, '11:00' UNION ALL SELECT 8, 4, '11:00' UNION ALL SELECT 9, 3, '11:00' ; -- 2. 순위 구하기 -- SELECT user_index , fish_size , create_date , rk FROM (SELECT user_index , fish_size , create_date , @rk := @rk + 1 AS rk , CASE user_index WHEN @My_ID THEN @My_rk := @rk END FROM (SELECT b.user_index , b.fish_size , MIN(b.create_date) create_date FROM (SELECT user_index , MAX(fish_size) fish_size FROM race_fish GROUP BY user_index ) a INNER JOIN race_fish b ON a.user_index = b.user_index AND a.fish_size = b.fish_size GROUP BY b.user_index, b.fish_size ORDER BY fish_size DESC, create_date ASC, user_index ASC ) a , (SELECT @rk := 0 -- 순위 , @My_rk := 0 -- 내 순위 , @My_ID := 7 -- 내 ID ) b ) a WHERE rk IN (1, 2, 3, @My_rk-2, @My_rk-1, @My_rk, @My_rk+1, @My_rk+2) ;