Mysql 查询带有 IN 子句和每个项目的限制

Sud*_*eer 5 mysql limit in-clause

我在 MySQL 中有一个表,其中有一个字段“class_id”。我需要编写一个查询,返回使用 IN 子句列表中的每个值按降序时间顺序排序的前 15 行。

查询解释:

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

在上面的示例查询中,我需要获取按降序时间顺序排序的每个 class_id(1,2 和 3)的前 15 行。

100*_*111 4

你需要帮助MySQL user defined variables

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
Run Code Online (Sandbox Code Playgroud)

在您的情况下,LIMIT 15实际上将结果集限制为最多包含 15 条记录,这不是您想要的。