这是一个复杂的过程.但是我有一个表,其中包含一个DATETIME字段,以及一些其他的int和float字段,需要对其求和并求平均值.我们希望基于时间戳在此表上进行求和和平均,最终旨在开发3个在某种意义上可以相互补充的查询.

所以能力看起来像这样

TIMESTAMP |subj_diff| SCR2 | SCR3

2011-09-20 09:01:37 | 1 | 0.02 | 1.6

2011-09-20 09:04:18 | 3 | 0.09 | 1.8

2011-09-20 14:24:55 | 5 | 0.21 | 1.2

2011-09-21 18:50:47 | 8 | 0.08 | 0.9

2011-09-21 18:54:21 | 9 | 0.12 | 2.1

我们要生成的三个查询是:

1.对以前的数据(包括当前选择的记录)中的所有前面的项进行汇总.还应该有一个总计列的另一列.例如,如果我们希望返回20号和21号之间的结果,则返回的表应如下所示:

TIMESTAMP |subj_diff| SCR2 | SCR3 | COUNT

2011-09-20 09:01:37 | 1 | 0.02 | ... | 1

2011-09-20 09:04:18 | 4 | 0.11 | | 2

2011-09-20 14:24:55 | 9 | 0.32 | | 3

2011-09-21 18:50:47 | 17 | ...

2011-09-21 18:54:21 | 26 |

2.以5分钟的时间间隔汇总结果-与上述类似,但是查询将返回3行作为第1行和第2行. 2和第4& 5行将以与上述相同的方式相加.在此查询中,如果每隔5分钟没有返回0,则返回0,计数为0.

TIMESTAMP |subj_diff| SCR2 | SCR3 | COUNT

2011-09-20 09:05:00 | 4 | 0.11 | 3.4 | 2

2011-09-20 14:25:00 | 5 | 0.21 | 1.2 | 1

2011-09-21 18:55:00 | 17 | 0.20 | 3.0 | 2

3.在一天中的每5分钟间隔(即从00:05:00到24:00:00),对第二个查询的结果集在第1个查询中执行相同的操作.

这是一个相当棘手的问题,我不知道如何开始.谁能编写SQL来解决这个问题?

这是一些使用游标和存储的proc的基本代码,但实际上并没有用.

DROP PROCEDURE curdemo;

DELIMITER $$

CREATE PROCEDURE curdemo()

BEGIN

DECLARE done INT DEFAULT 0;

DECLARE a datetime;

DECLARE b,c FLOAT;

DECLARE cur1 CURSOR FOR

SELECT msgDate, subj_diff FROM classifier_results

WHERE DATE(msgDate) >= DATE('2011-09-25');

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

CREATE TEMPORARY TABLE IF NOT EXISTS temp_scores (d datetime, acc float);

OPEN cur1;

read_loop: LOOP

FETCH cur1 INTO a, b;

IF done THEN

LEAVE read_loop;

END IF;

INSERT temp_scores(d,acc)

SELECT a, SUM(subj_diff) FROM classifier_results

WHERE DATE(msgDate) >= DATE('2011-09-25')

AND msgDate <= a;

END LOOP;

CLOSE cur1;

SELECT * FROM temp_scores;

END;

干杯!

解决方法:

试试这个代码-

创建并填充表:

CREATE TABLE classifier_results(

`TIMESTAMP` DATETIME NOT NULL,

subj_diff INT(11) DEFAULT NULL,

scr2 FLOAT(10, 5) DEFAULT NULL,

scr3 FLOAT(10, 5) DEFAULT NULL

);

INSERT INTO classifier_results VALUES

('2011-09-20 09:01:37', 1, 0.02000, 1.60000),

('2011-09-20 09:04:18', 3, 0.09000, 1.80000),

('2011-09-20 14:24:55', 5, 0.21000, 1.20000),

('2011-09-21 18:50:47', 8, 0.08000, 0.90000),

('2011-09-21 18:54:21', 9, 0.12000, 2.10000);

并执行以下查询:

-- 1 query

SET @subj_diff = 0;

SET @scr2 = 0;

SET @scr3 = 0;

SET @cnt = 0;

SELECT timestamp,

@subj_diff:=IF(@subj_diff IS NULL, subj_diff, @subj_diff + subj_diff) subj_diff,

@scr2:=IF(@scr2 IS NULL, scr2, @scr2 + scr2) scr2,

@scr3:=IF(@scr3 IS NULL, scr3, @scr3 + scr3) scr3,

@cnt:=@cnt+1 count

FROM classifier_results;

+---------------------+-----------+---------+---------+-------+

| timestamp | subj_diff | scr2 | scr3 | count |

+---------------------+-----------+---------+---------+-------+

| 2011-09-20 09:01:37 | 1 | 0.02000 | 1.60000 | 1 |

| 2011-09-20 09:04:18 | 4 | 0.11000 | 3.40000 | 2 |

| 2011-09-20 14:24:55 | 9 | 0.32000 | 4.60000 | 3 |

| 2011-09-21 18:50:47 | 17 | 0.40000 | 5.50000 | 4 |

| 2011-09-21 18:54:21 | 26 | 0.52000 | 7.60000 | 5 |

+---------------------+-----------+---------+---------+-------+

-- 2 query

SELECT

DATE(timestamp) + INTERVAL 5 * (12 * HOUR(timestamp) + FLOOR(MINUTE(timestamp) / 5)) MINUTE new_timestamp,

SUM(subj_diff) subj_diff,

SUM(scr2) scr2,

SUM(scr3) scr3,

COUNT(*) count

FROM classifier_results

GROUP BY new_timestamp;

+---------------------+-----------+---------+---------+-------+

| new_timestamp | subj_diff | scr2 | scr3 | count |

+---------------------+-----------+---------+---------+-------+

| 2011-09-20 09:00:00 | 4 | 0.11000 | 3.40000 | 2 |

| 2011-09-20 14:20:00 | 5 | 0.21000 | 1.20000 | 1 |

| 2011-09-21 18:50:00 | 17 | 0.20000 | 3.00000 | 2 |

+---------------------+-----------+---------+---------+-------+

-- 3 query

SET @subj_diff = 0;

SET @scr2 = 0;

SET @scr3 = 0;

SET @cnt = 0;

SELECT new_timestamp timestamp,

@subj_diff:=IF(@subj_diff IS NULL, subj_diff, @subj_diff + subj_diff) subj_diff,

@scr2:=IF(@scr2 IS NULL, scr2, @scr2 + scr2) scr2,

@scr3:=IF(@scr3 IS NULL, scr3, @scr3 + scr3) scr3,

@cnt:=@cnt+1 count

FROM (

SELECT

DATE(timestamp) + INTERVAL 5 * (12 * HOUR(timestamp) + FLOOR(MINUTE(timestamp) / 5)) MINUTE new_timestamp,

SUM(subj_diff) subj_diff,

SUM(scr2) scr2,

SUM(scr3) scr3,

COUNT(*) count

FROM classifier_results

GROUP BY new_timestamp

) t;

+---------------------+-----------+---------+---------+-------+

| timestamp | subj_diff | scr2 | scr3 | count |

+---------------------+-----------+---------+---------+-------+

| 2011-09-20 09:00:00 | 4 | 0.11000 | 3.40000 | 1 |

| 2011-09-20 14:20:00 | 9 | 0.32000 | 4.60000 | 2 |

| 2011-09-21 18:50:00 | 26 | 0.52000 | 7.60000 | 3 |

+---------------------+-----------+---------+---------+-------+

祝好运!

标签:aggregation,sql,mysql

来源: https://codeday.me/bug/20191207/2087353.html

mysql 10分钟一聚合_SQL-根据DateTime查询多个聚合-MySQL相关推荐

  1. mysql子查询作为条件_sql - 使用子查询作为条件的MySQL DELETE FROM

    sql - 使用子查询作为条件的MySQL DELETE FROM 我正在尝试这样的查询: DELETE FROM term_hierarchy AS th WHERE th.parent = 101 ...

  2. mysql比较多列最大值_SQL多列查询最大值

    直接从某一列查询出最大值或最小值很容易,通过group by字句对合适的列进行聚合操作,再使用max()/min()聚合函数就可以求出. 样本数据如下: key_id x y z A 1 2 3 B ...

  3. mysql 10分钟_10分钟入门mysql(含常用的sql语句,mysql常见问题及解决方案)

    开发中常用的sql语句 1,创建一个数据库并指定编码格式 drop database if exists test;create database test default character set ...

  4. mysql sql in or 替换_sql IN 的用法一例--替换 mysql longtext字段中某些内容的用法

    之前给改版的一个学校里的站点突然提出要求,说需要将之前编辑的文章的字体大小全部改成默认值. 字体的控制无非有两种,一是font-size = 16 px:然后是.但是,之前发布的文章,文字的控制是由编 ...

  5. php mysql 手机归属地_PHP手机号码归属地查询代码(API接口/mysql)

    首先我们介绍使用自己的数据库查询多个手机号码,那还是建议你拥有一个自己的的手机号码数据库.正常情况下,只是满足一般查询的话,你不需要去购买专业版的手机号码数据库,增加无谓成本.我免费为你提供一个ACC ...

  6. mysql根据经纬度搜周边_根据经纬度查询最近距离,mysql查询经纬度附近范围

    public class Test{ private static List ilist = new ArrayList(); public static void main(String[] arg ...

  7. MySQL 单表,多表,子查询知识

    目录 MySQL常见的建表约束(重要) Mysql数据查询语言(最重要) 一.单表查询 1.基本查询(后缀都是统一为from 表名) 2.排序(所谓升序和降序都是从上往下排列) 3.聚合函数 4.分组 ...

  8. mysql一条语句是如何被执行的——带你了解mysql语句执行内部顺序

    文章目录 写在前面 MySQL基本架构 超详细架构图 连接器 查询缓存 解析器 MySQL 8.0对Parser所做的改进 优化器 执行器 存储引擎 SQL语句执行时间分析 参考资料 写在前面 sel ...

  9. mysql十分钟分组_MYSQL每隔10分钟进行分组统计的实现方法

    前言 本文的内容主要是介绍了mysql每隔10分钟进行分组统计的实现方法,在画用户登录.操作情况在一天内的分布图时会非常有用,之前我只知道用「存储过程」实现的方法(虽然执行速度快,但真的是太不灵活了) ...

最新文章

  1. Paypal IPN
  2. Bruce' Tool 4 - autoruns
  3. 如何使用Behat在Drupal中使用行为驱动的开发
  4. 随想录(一种powerpc编译学习的方法)
  5. codeblock的多个文件编译怎么_给一个iOS app配置多个环境变量
  6. linux lsb版本错误,CentOS中-bash: lsb_release: command not found错误的解决方法
  7. 20个常用教育心理学效应
  8. Python办公自动化之Excel报表自动化,看这一篇就够了!
  9. 大四去NTT面试软件实习生的个人总结
  10. 中国大学moocpython答案查询_python,中国大学MOOC(慕课)答案公众号搜题
  11. 神经网络预测股价python talib_用机器学习来预测股价(代码+文档)——2018年iNTUtion决赛大作!...
  12. 软件测试基础理论2-产品模型
  13. hive sql 分组随机取数
  14. ubantu 添加防火墙策略_ubuntu防火墙设置
  15. 【硬币计数】基于matlab形态学硬币计数【含Matlab源码 393期】
  16. ipxe http linux boot,IPXE搭建底层装机系统
  17. 【LaTeX】LaTeX和Inkscape的一些使用技巧
  18. 提取网页文字-免费批量自动提取网页文字软件
  19. 2022年信息学部物联网工程学院学生科协第一次软件大培训
  20. 2022年10月最新网盘扩容技术原理分析

热门文章

  1. .net core 源码解析-mvc route的注册,激活,调用流程(三)
  2. Asp.Net Core 发布和部署(Linux + Jexus )
  3. git-ftp Can't access remote 'ft://...', exiting...问题记录
  4. [转]Android 常见安全漏洞修复理论与实践
  5. C和指针之用拉托斯特尼筛方法(Eratosthenes)查找区间质素个数
  6. LeetCode之Reverse String
  7. okhttp上传图片和其他参数_Android中Okhttp3实现上传多张图片同时传递参数_放手_前端开发者...
  8. ubuntu下amd超频工具_Ubuntu16.04 版预装AMD GPU驱动【最新版】_Linux_Ubuntu-云市场-阿里云...
  9. 通过高速计算机网络和多媒体,计算机网络作业及答案.doc
  10. resque java_php-resque :基于Redis的后台任务系统