MySQL获取按用户

时间:2017-01-10 19:26:06

标签: 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

那么我试图以Used分组的特定ReadID的每日平均值UserID结束。 例如,最终得到ReadID = jkl

的以下输出
            UserID      Daily Avg

            102         2.465
            103         0.754
            104         0.306
            105         n/a

如果我使用上表,UserID = 102 ReadID = jkl的计算是:
select (2500 - 2108 ) / DateDiff ('2015-12-07', '2015-07-01')
这给出了2.465的答案

这些数字来自: select (current Used - last previous Used ) / DateDiff('current Date', 'last previous Date')

因此,我可以一次只能UserIDUserID,但不会针对特定ReadID中的所有_id执行此操作。
谁能告诉我怎么做?

2 个答案:

答案 0 :(得分:0)

有些功能允许您获取给定值的平均值,并且有一些子句允许您根据其他值对聚合信息(如平均值)进行分组。鉴于此,尝试这样的事情:

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

另外,我建议你看一下MySQL 5.7 Reference Guide。此链接包含有关GROUP BY功能的信息,如果您看一点,您可以找到有关平均值的信息。

答案 1 :(得分: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