【问题标题】:mysql query to get the average from the latest N rows for distinct phone_numbersmysql查询以获取不同phone_numbers的最新N行的平均值
【发布时间】:2016-08-01 20:23:46
【问题描述】:

我的表是 (phone_number, bpm, timestamp)。我想获取每个 phone_number 的最新 10 行的 phone_number, avg(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 子句。

【问题讨论】:

  • I cannot use IN clause in my version of mysql.请详细说明。
  • 我正在使用 mysql 5.5 并在我的查询中使用 IN 子句时出现此错误。

标签: mysql sql group-by having


【解决方案1】:

这对 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;

【讨论】:

  • 这非常有效。我不明白这些部分,(@rn := if(@pn = phone_number, @rn + 1, if(@pn := phone_number, 1, 1) ) )SELECT @pn := '', @rn := 0你能解释一下吗?
  • @HarishVishwakarma 。 . .在 MySQL 文档中查找用户变量。这些是实现等效于 ANSI 标准 row_number() 函数的用户变量。
猜你喜欢
  • 2016-07-09
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
相关资源
最近更新 更多