2015-11-15 52 views
-1

獲得4組,每組6條,我想每個從過去24個結果6條獲得4組的平均值(從各組分別)。基本上得到的前6條的平均記錄(從最後24條記錄),然後在接下來的6條記錄等等。我怎樣才能做到這一點?過去24個結果

表例如:

id |  datetime  | viewer_count 
    ---------------------------------------- 
    1 | 2015-10-31 22:00:38 | 1548 
    2 | 2015-10-31 23:00:42 | 1589 
    3 | 2015-11-01 00:00:44 | 1589 
    4 | 2015-11-01 01:00:37 | 1587 
    ... |   ...   | ... 

回答

0

可以使用一個變量來枚舉連續記錄做到這一點:

SELECT (rn-1) DIV 6 AS groupNo, AVG(viewer_count) AS averageCount 
FROM (
SELECT id, datetime, viewer_count, 
     @rn := @rn + 1 AS rn 
FROM mytable 
CROSS JOIN (SELECT @rn := 0) var 
ORDER BY id DESC) t 
WHERE t.rn <= 24 
GROUP BY (rn-1) DIV 6 
ORDER BY groupNo DESC 

如果通過id DESC訂購和使用變量枚舉連續記錄,如@rn,那麼你可以使用獲得最後的24條記錄

WHERE t.rn <= 24 

在外部查詢中。

您可以使用整數除法的6片組記錄:

GROUP BY (rn-1) DIV 6 

最後,使用:

ORDER BY groupNo DESC 

你可以重新建立初始行順序。

注意:上述查詢假定您的表包含24個或更多記錄。

Demo here

+0

是否有可能調整查詢其中的記錄添加每半小時一表?只得到不準確的結果與't.rn <= 48'&'DIV 12' – kyro0