mysql 10分钟一聚合_SQL-根据DateTime查询多个聚合-MySQL
这是一个复杂的过程.但是我有一个表,其中包含一个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相关推荐
- mysql子查询作为条件_sql - 使用子查询作为条件的MySQL DELETE FROM
sql - 使用子查询作为条件的MySQL DELETE FROM 我正在尝试这样的查询: DELETE FROM term_hierarchy AS th WHERE th.parent = 101 ...
- mysql比较多列最大值_SQL多列查询最大值
直接从某一列查询出最大值或最小值很容易,通过group by字句对合适的列进行聚合操作,再使用max()/min()聚合函数就可以求出. 样本数据如下: key_id x y z A 1 2 3 B ...
- mysql 10分钟_10分钟入门mysql(含常用的sql语句,mysql常见问题及解决方案)
开发中常用的sql语句 1,创建一个数据库并指定编码格式 drop database if exists test;create database test default character set ...
- mysql sql in or 替换_sql IN 的用法一例--替换 mysql longtext字段中某些内容的用法
之前给改版的一个学校里的站点突然提出要求,说需要将之前编辑的文章的字体大小全部改成默认值. 字体的控制无非有两种,一是font-size = 16 px:然后是.但是,之前发布的文章,文字的控制是由编 ...
- php mysql 手机归属地_PHP手机号码归属地查询代码(API接口/mysql)
首先我们介绍使用自己的数据库查询多个手机号码,那还是建议你拥有一个自己的的手机号码数据库.正常情况下,只是满足一般查询的话,你不需要去购买专业版的手机号码数据库,增加无谓成本.我免费为你提供一个ACC ...
- mysql根据经纬度搜周边_根据经纬度查询最近距离,mysql查询经纬度附近范围
public class Test{ private static List ilist = new ArrayList(); public static void main(String[] arg ...
- MySQL 单表,多表,子查询知识
目录 MySQL常见的建表约束(重要) Mysql数据查询语言(最重要) 一.单表查询 1.基本查询(后缀都是统一为from 表名) 2.排序(所谓升序和降序都是从上往下排列) 3.聚合函数 4.分组 ...
- mysql一条语句是如何被执行的——带你了解mysql语句执行内部顺序
文章目录 写在前面 MySQL基本架构 超详细架构图 连接器 查询缓存 解析器 MySQL 8.0对Parser所做的改进 优化器 执行器 存储引擎 SQL语句执行时间分析 参考资料 写在前面 sel ...
- mysql十分钟分组_MYSQL每隔10分钟进行分组统计的实现方法
前言 本文的内容主要是介绍了mysql每隔10分钟进行分组统计的实现方法,在画用户登录.操作情况在一天内的分布图时会非常有用,之前我只知道用「存储过程」实现的方法(虽然执行速度快,但真的是太不灵活了) ...
最新文章
- Paypal IPN
- Bruce' Tool 4 - autoruns
- 如何使用Behat在Drupal中使用行为驱动的开发
- 随想录(一种powerpc编译学习的方法)
- codeblock的多个文件编译怎么_给一个iOS app配置多个环境变量
- linux lsb版本错误,CentOS中-bash: lsb_release: command not found错误的解决方法
- 20个常用教育心理学效应
- Python办公自动化之Excel报表自动化,看这一篇就够了!
- 大四去NTT面试软件实习生的个人总结
- 中国大学moocpython答案查询_python,中国大学MOOC(慕课)答案公众号搜题
- 神经网络预测股价python talib_用机器学习来预测股价(代码+文档)——2018年iNTUtion决赛大作!...
- 软件测试基础理论2-产品模型
- hive sql 分组随机取数
- ubantu 添加防火墙策略_ubuntu防火墙设置
- 【硬币计数】基于matlab形态学硬币计数【含Matlab源码 393期】
- ipxe http linux boot,IPXE搭建底层装机系统
- 【LaTeX】LaTeX和Inkscape的一些使用技巧
- 提取网页文字-免费批量自动提取网页文字软件
- 2022年信息学部物联网工程学院学生科协第一次软件大培训
- 2022年10月最新网盘扩容技术原理分析
热门文章
- .net core 源码解析-mvc route的注册,激活,调用流程(三)
- Asp.Net Core 发布和部署(Linux + Jexus )
- git-ftp Can't access remote 'ft://...', exiting...问题记录
- [转]Android 常见安全漏洞修复理论与实践
- C和指针之用拉托斯特尼筛方法(Eratosthenes)查找区间质素个数
- LeetCode之Reverse String
- okhttp上传图片和其他参数_Android中Okhttp3实现上传多张图片同时传递参数_放手_前端开发者...
- ubuntu下amd超频工具_Ubuntu16.04 版预装AMD GPU驱动【最新版】_Linux_Ubuntu-云市场-阿里云...
- 通过高速计算机网络和多媒体,计算机网络作业及答案.doc
- resque java_php-resque :基于Redis的后台任务系统