MySQL如何按固定天数统计平均值?

小彘不会飞 2015-07-02 11:23:15
MySQL表格如图,其中albDate(date),albTime(time),albAlbedo(double),每天的记录条数不确定,我想要统计每5天的albAlbedo的平均值,请问该如何写查询语句,如果需要编程实现,请各位大虾给个思路(开发语言、环境等,本人会C#),不胜感激~
...全文
473 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
小彘不会飞 2015-07-04
  • 打赏
  • 举报
回复
感谢yangb803的回答,不过我在用的时候把日期字段的引号去掉了,不然会报语法错误
ACMAIN_CHM 2015-07-02
  • 打赏
  • 举报
回复
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
道玄希言 2015-07-02
  • 打赏
  • 举报
回复

SET @dt := (SELECT MIN(`date`) FROM albedotest);
SELECT @str := CONCAT('SELECT MIN(`date`), 
    FLOOR(DATEDIFF(`date`,''', @dt, ''')/5) AS dt, 
    AVG(albvalue) AS avgvalue FROM albedotest GROUP BY dt');
PREPARE rc FROM @str;
EXECUTE rc;
小彘不会飞 2015-07-02
  • 打赏
  • 举报
回复
感谢版主的提醒……因为之前建表的时候是使用的Navicat for MySQL,所以没有建表语句,这里就贴个原表的简化版的代码:

CREATE TABLE albedotest
(
id int(10) NOT NULL PRIMARY KEY auto_increment,
date DATE,
time TIME,
albvalue double(12,6)
);

INSERT INTO albedotest (date,time,albvalue) VALUES('2014-04-27','17:50:00','0.333188');
INSERT INTO albedotest (date,time,albvalue) VALUES('2014-04-27','18:00:00','0.339575');
INSERT INTO albedotest (date,time,albvalue) VALUES('2014-04-28','14:00:00','0.335765');
INSERT INTO albedotest (date,time,albvalue) VALUES('2014-04-28','14:10:00','0.567785');
INSERT INTO albedotest (date,time,albvalue) VALUES('2014-04-29','00:10:00','0.348575');
INSERT INTO albedotest (date,time,albvalue) VALUES('2014-04-29','00:20:00','0.468775');
INSERT INTO albedotest (date,time,albvalue) VALUES('2014-04-30','09:30:00','0.348767');
INSERT INTO albedotest (date,time,albvalue) VALUES('2014-04-30','09:40:00','0.571264');
INSERT INTO albedotest (date,time,albvalue) VALUES('2014-05-01','16:00:00','0.339576');
INSERT INTO albedotest (date,time,albvalue) VALUES('2014-05-01','16:10:00','0.471543');
INSERT INTO albedotest (date,time,albvalue) VALUES('2014-05-02','13:10:00','0.112356');
……
想要得到如下的结果: date avgvalue 2014-04-27 value1 2014-05-02 value2 2014-05-07 value3 原表中每天不止两条数据,这里只是举个例子,数据库用的是MySQL 5.5
道玄希言 2015-07-02
  • 打赏
  • 举报
回复
造一个分组字段, 比如將 1900-01-01 视为起始时间, 你也可以先取出表中最小的日期为起始时间. 然后你想几天连续几天, 那就除几, 然后按其分组. 注: 如果你需要统计的是数据库中, 只是顺序的五天 ,而不一定是相连的五天的数据, 此方法不适用.


SELECT CONVERT((DATEDIFF(albdate, '1900-01-01')/5), DECIMAL(10,0)) AS a, albAlbedo FROM tbl01 GROUP BY a

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧