2016-09-18 4 views
3

"class_id"필드가있는 MySQL 테이블이 있습니다. IN 절이있는 목록의 각 값에 대해 내림차순으로 내림차순 정렬하여 상위 15 개 행을 반환하는 쿼리를 작성해야합니다. 설명은IN 절과 각 항목에 대한 제한이있는 MySQL 쿼리

검색어 : 위의 예제 쿼리에서

select * from table_x where class_id IN (1,2,3) sort by time_x desc limit 15; 

, 나는 각 CLASS_ID에 대한 상위 15 행을 인출 할 필요가 (1, 2, 3) 시간 내림차순에 따라 소트.

+0

테이블 구조를 게시하십시오. – 1000111

답변

2

당신은 실제로 당신이 원하는 무엇을하지 않은 최대 15 레코드를 포함하는 결과 집합을 제한 귀하의 경우 LIMIT 15

SELECT 
* 
FROM 
(
    SELECT 
     X.*, 
     IF(@sameClass = class_id, @rn := @rn + 1, 
      IF(@sameClass := class_id, @rn := 1, @rn := 1) 
     ) AS rank 
    FROM table_x AS X 
    CROSS JOIN (SELECT @sameClass := 0, @rn := 1) AS var 
    WHERE class_id IN (1, 2, 3) 
    ORDER BY class_id, time_x DESC 
) AS t 
WHERE t.rank <= 15 
ORDER BY t.class_id, t.rank 

MySQL user defined variables의 도움이 필요합니다.

+0

내가 찾고있는 것. Teste와 잘 작동하고있어. 고맙습니다. 그리고 네, 더 나은 설명을 위해서 제 질문에 위 쿼리를 게시했습니다. – Sudheer

+0

안녕하십니까. 또한'WHERE t.rank <= n' 행을 통해 클래스 당 레코드 수를 쉽게 조정할 수 있습니다. n에 임의의 값을 넣을 수 있습니다. – 1000111