2016-08-01 8 views
0

私のテーブルは(phone_number、bpm、timestamp)です。私は各phone_numberの最新の10行のphone_number、avg(bpm)を取得したいと思います。私は試しました..mysqlクエリを使用して、別個のphone_numbersの最新のN行から平均を取得する

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句を使用できません。

+0

「私のバージョンのmysqlではIN節を使用できません。 – Strawberry

+0

私はmysql 5.5を使用していて、クエリでIN句を使用しているときにこのエラーが発生します。 –

答えて

2

これは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; 
+0

これは完全に機能します。 ) '(@rn:= if(@pn = phone_number、@rn + 1、 の場合) ) )「 」と「SELECT @pn := ''、@ rn:= 0' 説明できますか? –

+1

@HarishVishwakarma。 。 。 MySQLのマニュアルでユーザ変数を調べてください。これらは、ANSI標準の 'row_number()'関数と同等のものを実装しているユーザ変数です。 –

関連する問題