2011-01-28 3 views
3

Databasemysql 테이블에서 마지막 3 개의 고유 ID를 얻는 방법

기본적으로 나는 데이터베이스 테이블을 가지고있다. 첫 번째 열은 id입니다. 두 번째는 pkg_id입니다. 세 번째는 중요하지 않으며 네 번째는 pkg_id가 위치한 이전 ID입니다. 테이블에서 마지막 3 개의 pkg_id를 가져와야합니다. 그래서 기본적으로 마지막 3 개의 17879 pkg_id와 마지막 3 개의 3075를 가져와야합니다. 따라서이 예제에서는 17879의 경우 ID 9, 7, 6을, 3075의 경우 ID 8, 5, 3을 가져와야합니다.

그 주위에 내 머리를 쓰지 마라. 이전 ID에 대한 액세스 권한이 있습니다. 그래서 id 9에서 17879가 id 7에서 마지막이라고 말합니다. id 8은 id 5에서 마지막이었습니다.

누구든지 훌륭한 쿼리를 작성할 수 있다면 도움이 될 것입니다. 또한 데이터베이스 액세스를 위해 Java를 사용하기 때문에 MySQL에있을 필요는 없습니다. 정말 고마워.

답변

5
SELECT m.* 
FROM (
     SELECT pkg_id, 
       COALESCE(
       (
       SELECT id 
       FROM mytable mi 
       WHERE mi.pkg_id = md.pkg_id 
       ORDER BY 
         id DESC 
       LIMIT 2, 1 
       ), 0) AS mid 
     FROM (
       SELECT DISTINCT pkg_id 
       FROM mytable 
       ) md 
     ) q 
JOIN mytable m 
ON  m.pkg_id <= q.pkg_id 
     AND m.pkg_id >= q.pkg_id 
     AND m.id >= q.mid 

이 작업을 빠르게 수행하려면 mytable (pkg_id, id)에 색인을 생성하십시오.

이 조건은 단순한 m.pkg_id = q.pkg_id 대신 m.pkg_id <= q.pkg_id AND m.pkg_id >= q.pkg_id입니다. 인덱스를 효율적으로 사용하려면이 작업이 필요합니다.

+0

거룩한 괴짜. 너는 어떻게이 세상을 생각해 냈어? 귀하의 SQL 쿵푸가 강하다. 놀랄 만한!! 정말 고맙습니다!! –

관련 문제