我有一个如下的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')
因此,我可以一次只能UserID
个UserID
,但不会针对特定ReadID
中的所有_id
执行此操作。
谁能告诉我怎么做?
答案 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