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

标签 mysql sql select

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

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

SELECT results_a.*
FROM   zec_results results_a 
WHERE  (
    SELECT COUNT(results_b.zr_id) 
    FROM   zec_results AS results_b 
    WHERE  results_b.zr_miner_id = results_a.zr_miner_id 
    AND    results_b.zr_id >= results_a.zr_id
) <= 24 

最佳答案

使用变量!

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 ;

如果你想把查询放到一个 View 中,那么上面的方法就不行了。您的方法的性能可能会随着 (zr_miner_id, zr_id) 上的索引而提高。

关于mysql - 为某个非主字段选择最后 X 个条目的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45387388/

相关文章:

python - 在 python3 中比较字符串和解码后的 unicode

mySQL:要复制到另一列的列数据

mysql - 在同一个查询mysql中更新+排序

mysql - Row_number 语法错误(Wordpress)

MYSQL - 检查所有组成员是否具有相同类型

sql - Kotlin 公开了 DSL 查询映射

sql - 使用 SQL Server 在 select 语句中生成增量号

SQL:如何根据不同的现有条件选择字段?

php - Laravel 中缓慢的 MySQL 查询在其他地方却很快

php - 如何在php中将BLOB变量显示为图片