Mysql SQL查询为某个非主字段选择最后X个条目

Mysql SQL查询为某个非主字段选择最后X个条目,mysql,sql,select,Mysql,Sql,Select,我在设置稍微高级一点的SQL查询时遇到困难。 我试图做的是为每个zr_miner_id选择最后24个条目,但我一直得到SQL超时。到目前为止,表中有大约40000个条目。 假设zr_miner_id 1有200个条目,zr_miner_id 2有200个条目,我最终得到48个结果 到目前为止,我提出了以下问题。 这应该做的是选择zec_结果中的每个结果,这些结果具有少于24个具有相同zr_miner_id的新条目。 我想不出任何更好的方法来执行这项任务,但话说回来,我在SQL方面还没有那么先进

我在设置稍微高级一点的SQL查询时遇到困难。 我试图做的是为每个zr_miner_id选择最后24个条目,但我一直得到SQL超时。到目前为止,表中有大约40000个条目。 假设zr_miner_id 1有200个条目,zr_miner_id 2有200个条目,我最终得到48个结果

到目前为止,我提出了以下问题。 这应该做的是选择zec_结果中的每个结果,这些结果具有少于24个具有相同zr_miner_id的新条目。 我想不出任何更好的方法来执行这项任务,但话说回来,我在SQL方面还没有那么先进

选择结果* 来自zec_结果_a 哪里 选择COUNTresults\u b.zr\u id 从zec_结果作为结果_b 其中results_b.zr_miner_id=results_a.zr_miner_id 和results_b.zr_id>=results_a.zr_id 使用变量

SELECT r.*
FROM (SELECT r.*,
             (@rn := if(@m = r.zr_miner_id, @rn + 1,
                        if(@m := r.zr_miner_id, 1, 1)
                       )
             ) as rn
      FROM zec_results r CROSS JOIN
           (SELECT @m := -1, @rn := 0) params
      ORDER BY r.zr_miner_id, r.zr_id DESC
     ) r
WHERE rn <= 24 ;

如果要将查询放入视图中,则上述操作将不起作用。使用zr_miner_id、zr_id索引,您的方法性能可能会有所提高。

谢谢您的回答。这完全超出了我的能力范围。我得到了以下错误:1054-字段列表中靠近位置194的未知列“z.zr_miner_id”。它还声明:1。此类型的子句以前已分析过。在1942号位置附近。无法识别的语句类型。在194号位置附近