首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL :如何计算每个数据的移动平均值?

MYSQL :如何计算每个数据的移动平均值?
EN

Stack Overflow用户
提问于 2021-11-12 19:33:09
回答 1查看 68关注 0票数 0

如何检查每一项的3个和(移动平均值)?

我不能使用下面的结果来计算每一项。

代码语言:javascript
复制
Original data : 
scdate              | value  |
--------------------|--------|
2021-11-10 17:00:00 | 1943.98|
2021-11-10 17:00:18 | 1957.13|
2021-11-10 17:00:36 | 1953.94|
2021-11-10 17:00:54 | 1946.28|
2021-11-10 17:01:12 | 1960.29|
2021-11-10 17:01:29 | 1950.39|
2021-11-10 17:01:47 | 1942.62|
2021-11-10 17:02:05 | 1954.64|
2021-11-10 17:02:23 | 1958.21|
2021-11-10 17:02:41 | 1950.26|
2021-11-10 17:02:58 | 1945.33|
2021-11-10 17:03:16 | 1960.35|

使用mysql

代码语言:javascript
复制
   SELECT  scdate,value1,value2,avg(tt.value1) as avg_v1,avg(tt.value2) as avg_v2 ,avg(tt.value2) as avg_v FROM
(
SELECT t.scdate,t.value1,t.value2,(@rownum := @rownum + 1) - 1 AS rownum FROM (SELECT @rownum := 0) 
r,scantech_data t 
ORDER BY  scdate asc
) tt
WHERE scdate >= '2021-11-10 17:00:00' and  scdate <='2021-11-10 17:10:00'
GROUP BY tt.rownum - tt.rownum % 3
order by scdate

代码语言:javascript
复制
***Wrong result

 scdate              |  value1 |  value2 |  avg1   |  avg2   |
 --------------------|---------|---------|---------|---------|
 2021/11/10 17:00:00 | 1943.98 | 1942.22 | 1951.68 | 1950.93 |
 2021/11/10 17:00:54 | 1946.28 | 1946.15 | 1952.32 | 1951.55 |
 2021/11/10 17:01:47 | 1942.62 | 1943.05 | 1951.82 | 1952.49 |
 2021/11/10 17:02:41 | 1950.26 | 1949.86 | 1951.98 | 1951.96 |

如何获得以下结果??

我应该怎么修改??

代码语言:javascript
复制
***Correct result

 scdate              | value   |  value2 |  avg_v1  | avg_v2  |
 --------------------|---------|---------|----------|---------|
 2021/11/10 17:00:00 | 1943.98 | 1942.22 | 1951.68  | 1950.93 |
 2021/11/10 17:00:18 | 1957.13 | 1957.25 | 1952.45  | 1952.24 |
 2021/11/10 17:00:36 | 1953.94 | 1953.32 | 1953.50  | 1952.78 |
 2021/11/10 17:00:54 | 1946.28 | 1946.15 | 1952.32  | 1951.56 |
 2021/11/10 17:01:12 | 1960.29 | 1958.88 | 1951.10  | 1950.52 |
 2021/11/10 17:01:29 | 1950.39 | 1949.64 | 1949.22  | 1949.50 |
 2021/11/10 17:01:47 | 1942.62 | 1943.05 | 1951.82  | 1952.49 |
 2021/11/10 17:02:05 | 1954.64 | 1955.81 | 1954.37  | 1954.76 |
 2021/11/10 17:02:23 | 1958.21 | 1958.62 | 1951.27  | 1951.24 |
 2021/11/10 17:02:41 | 1950.26 | 1949.86 | 1951.98  | 1951.97 |
 2021/11/10 17:02:58 | 1945.33 | 1945.25 | 1952.84  | 1953.02 |
 2021/11/10 17:03:16 | 1960.35 | 1960.79 | 1960.35  | 1960.79 |

ps : 1943.98 -11-10 17:00:00 value1 :1943.98 avg1 : 1951.68

(1943.98 + 1957.13 + 1953.94 )/3= 1951.68

使用版本: MySql 5.1.47

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-11-12 20:10:08

Link to view windows features

代码语言:javascript
复制
SELECT scdate, value,
SUM(value) 
OVER 
(PARTITION BY scdate ORDER BY scdate ROWS BETWEEN CURRENT ROW  AND 3 FOLLOWING)
FROM test;

近似查询

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69948210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档