mysql 查询以获取不同phone_numbers 的最新N 行的平均值

标签 mysql sql group-by having

我的表是(电话号码、bpm、时间戳)。我想获取每个电话号码最新 10 行的电话号码、平均值(bpm)。我已经尝试过..

SELECT phone_number, AVG( bpm ) 
FROM (
SELECT * 
FROM table_name
WHERE bpm !=0
ORDER BY timestamp DESC
) AS temp
GROUP BY phone_number
HAVING COUNT( * ) <=10

此查询给出空结果。我无法在我的 mysql 版本中使用 IN 子句。

最佳答案

这是 MySQL 中的一个难题。最合理的解决方案是使用变量枚举行然后聚合:

SELECT phone_number, AVG(bpm)
FROM (SELECT t.*,
             (@rn := if(@pn = phone_number, @rn + 1,
                        if(@pn := phone_number, 1, 1)
                       )
             ) as rn
      FROM table_name t CROSS JOIN
            (SELECT @pn := '', @rn := 0) params
      WHERE bpm <> 0
      ORDER BY phone_number, timestamp DESC
     ) t
WHERE rn <= 10
GROUP BY phone_number;

关于mysql 查询以获取不同phone_numbers 的最新N 行的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38707474/

相关文章:

python - 如何获取最大值不重复的行的索引?

php - 是否有关闭带有 PDO 的 mysql 准备语句的功能?

mysql - PHP MYSQL - 返回不相同的值

sql - SELECT 子句中不存在聚合函数时的 GROUP BY 行为

Mysql group by 具有内连接的多列

mysql - 按查询分组的计数函数

mysql 外键和索引

php - 如何使用更新语句mysqli向表中插入数据

mysql - 如何创建MySQL分层递归查询

SQL 选择行,前提是它们包含在给定年份的 TOP 中