2017-01-10 40 views
1

分組我有一個MySQL表如下所示:MySQL的獲取,平均每天的最後2個記錄用戶

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')

小號o我可以一次執行一次UserID,但不能執行特定ReadID中的所有UserID
任何人都可以告訴我如何做到這一點?

+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功能的信息,如果你看起來有點點,你可以找到有關平均值的信息。

相關問題