2017-01-10 19 views
1

でグループ化された最後の2つのレコードの日々の平均を取得:MySQLは、私は次のようにMySQLのテーブルを持っているユーザー

PKey ReadID UserID Date  Used 
    1 abc  101 2015-02-01 553 
    2 abc  102 2015-02-01 1090 
    3 abc  103 2015-05-01 640 
    4 def  104 2015-06-01 140 
    5 ghi  101 2015-07-01 780 
    6 ghi  102 2015-07-01 2108 
    7 ghi  103 2015-07-01 778 
    8 jkl  104 2015-12-07 198 
    9 jkl  105 2015-12-07 101 
    10 jkl  102 2015-12-07 2500 
    11 jkl  103 2015-12-07 898 

だから何イムでグループ化された特定のReadIDの毎日の平均Used、で終わるしようとしていますUserID。例えば、ReadIDについては、以下の出力で終わるする = JKL

  UserID  Daily Avg 

      102   2.465 
      103   0.754 
      104   0.306 
      105   n/a 

iは上記の表を使用する場合、ReadID = JKLと= 102 UserIDの計算である:
select (2500 - 2108)/DateDiff ('2015-12-07', '2015-07-01')
これは答えを与えます
select (current Used - last previous Used)/DateDiff('current Date', 'last previous Date')

S:2.465

のこれらの数字から来ます私は一度にUserIDのためにそれをすることができますが、すべてUserID特にReadIDのためにではありません。
誰でもこの方法を教えてもらえますか?

+0

私は、ユーザーIDとreadID – durbnpoisn

+0

@Oの間にいくつかの混乱があると思います。ジョーンズ謝罪、それは間違った値のセットでした。私は今の例の正しい値を入れました。 – user3726827

答えて

0

私はいくつかReadIDについては、以下を試してみましたが、動作しているようだ:

SELECT x.MeterID,(x.Used - y.lastused)/DATEDIFF(x.date, y.lastdate) AS dailyavg 
    FROM 
     (SELECT PKey,ReadID,UserID, Date AS date,Used 
      FROM table1 
      WHERE ReadID = 'jkl') x 
    JOIN 
     (SELECT MAX(PKey) lastpkey,ReadID,MeterID,MAX(Date) AS lastdate,Max(Used) AS lastused 
      FROM table1 
      WHERE Date < (select MIN(Date) FROM table1 WHERE ReadID = 'jkl') 
      GROUP BY MeterID 
      Order BY Date DESC) y 
    ON y.MeterID = x.MeterID 
0

与えられた値の平均を取ることができる関数があり、他の値に従って集計された情報(平均など)をグループ化できる句があります。このような何かを試してみてください、ということを考える:

SELECT AVG(Used) FROM [table] WHERE date = [date] GROUP BY UserID

はまた、私はあなたがMySQL 5.7 Reference Guideを見てみましょうお勧めします。このリンクにはGROUP BY関数に関する情報があり、ちょっと見たら平均に関する情報を見つけることができます。

関連する問題