MySql查询时间间隔数据的直方图

2024-02-13

我有一个这种类型的事件输入

event user
event start
event end
event type

插入到 MySql 表中,每个表都在自己的行中,以 user+start 作为主键。

我需要按时间间隔(例如分钟)查询类型的直方图,计算每个时间间隔发生的事件。 就像是:

SELECT count(*) as hits FROM events 
WHERE type="browsing" 
GROUP BY time_diff("2015-1-1" AND "2015-1-2") / 60 * second

但除了编写代码之外,我找不到任何方法可以在 SQL 中做到这一点,有什么想法吗?

样本数据

user, start, end, type
1, 2015-1-1 12:00:00, 2015-1-1 12:03:59, browsing
2, 2015-1-1 12:03:00, 2015-1-1 12:06:00, browsing
2, 2015-1-1 12:03:00, 2015-1-1 12:06:00, eating
3, 2015-1-1 12:03:00, 2015-1-1 12:08:00, browsing

结果应该是这样的:

         ^
count    |
browsing |
users    |       *
         |       *  *  *  *
         | *  *  *  *  *  *  *  *
         --|--|--|--|--|--|--|--|--|--> minute
         0  1  2  3  4  5  6  7  8  9 

您可以使用 group by 和您想要的级别来执行此操作。这是使用您提供的数据的示例:

首先使用 SQL 创建表并填充它。这里的 ID 列不是“必需的”,但如果表很大或有索引,则建议使用它。

CREATE TABLE `test`.`events` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `user` INT NULL,
  `start` DATETIME NULL,
  `end` DATETIME NULL,
  `type` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));

INSERT INTO events (user, start, end, type) VALUES 
(1, '2015-1-1 12:00:00', '2015-1-1 12:03:59', 'browsing'),
(2, '2015-1-1 12:03:00', '2015-1-1 12:06:00', 'browsing'),
(2, '2015-1-1 12:03:00', '2015-1-1 12:06:00', 'eating'),
(3, '2015-1-1 12:03:00', '2015-1-1 12:08:00', 'browsing');

要获取持续时间分钟数与事件数的有序对列表:

然后可以使用 timestampdiff 函数轻松编写查询,如下所示:

SELECT 
    TIMESTAMPDIFF(MINUTE, start, end) as minutes,
    COUNT(*) AS numEvents
FROM
    test.events
GROUP BY TIMESTAMPDIFF(MINUTE, start, end)

输出:

minutes      numEvents
3            3
5            1

select 中的第一个参数可以是 FRAC_SECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER 或 YEAR 之一。

以下是您可以执行的更多查询示例:

按小时划分的活动(应用下限功能)

SELECT 
    TIMESTAMPDIFF(HOUR, start, end) as hours,
    COUNT(*) AS numEvents
FROM
    test.events
GROUP BY TIMESTAMPDIFF(HOUR, start, end)

**按小时排列的事件,格式更好**

SELECT 
    CONCAT("<", TIMESTAMPDIFF(HOUR, start, end) + 1) as hours,
    COUNT(*) AS numEvents
FROM
    test.events
GROUP BY TIMESTAMPDIFF(HOUR, start, end)

您可以按多种选项进行分组,但这绝对可以帮助您入门。大多数绘图包允许您指定任意 x y 坐标,因此您无需担心 x 轴上缺失的值。

要获取特定时间的事件数量的有序对列表(用于记录):请注意,这是供参考的。

现在进行查询。首先,您必须选择要用于分组的项目。例如,某项任务可能需要一分钟以上,因此开始和结束的时间可能不同。对于所有这些示例,我都以开始时间为基础,因为那是事件实际发生的时间。

要按分钟对事件计数进行分组,您可以使用如下查询:

SELECT 
     DATE_FORMAT(start, '%M %e, %Y %h:%i %p') as minute, 
     count(*) AS numEvents 
FROM test.events 
GROUP BY YEAR(start), MONTH(start), DAYOFMONTH(start), HOUR(start), MINUTE(start);

请注意它是如何按所有项目进行分组的,从年份开始,到分钟。我还将分钟显示为标签。结果输出如下所示:

minute                      numEvents
January 1, 2015 12:00 PM    1
January 1, 2015 12:03 PM    3

然后您可以使用 php 获取这些数据,并准备将其显示在众多图形库之一中,在 x 轴上绘制分钟列,并在 y 轴上绘制 numEvents。

以下是您可以执行的更多查询示例:

按小时划分的活动

SELECT 
     DATE_FORMAT(start, '%M %e, %Y %h %p') as hour, 
     count(*) AS numEvents 
FROM test.events 
GROUP BY YEAR(start), MONTH(start), DAYOFMONTH(start), HOUR(start);

按日期排列的活动

SELECT 
    DATE_FORMAT(start, '%M %e, %Y') as date, 
    count(*) AS numEvents 
FROM test.events 
GROUP BY YEAR(start), MONTH(start), DAYOFMONTH(start);

按月列出的活动

SELECT 
    DATE_FORMAT(start, '%M %Y') as date, 
    count(*) AS numEvents 
FROM test.events 
GROUP BY YEAR(start), MONTH(start);

按年份划分的活动

SELECT 
    DATE_FORMAT(start, '%Y') as date, 
    count(*) AS numEvents 
FROM test.events 
GROUP BY YEAR(start);

我还应该指出,如果您在该表的起始列上有索引,这些查询将很快完成,即使有数亿行。

希望这可以帮助!如果您对此还有任何其他疑问,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySql查询时间间隔数据的直方图 的相关文章

  • Postgres 中 -Infinity 和 Infinity 的适当值

    在一种情况下 我们必须在 Postgres DB 中存储 无穷大和 无穷大的值 应该考虑什么合适的值 如果没有 请建议最合适的替代方案 你实际上可以使用 infinity and infinity for FLOAT4 and FLOAT8
  • 更新 SQLAlchemy 中的特定行

    我将 SQLAlchemy 与 python 一起使用 我想更新表中等于此查询的特定行 UPDATE User SET name user WHERE id 3 我通过 sql alchemy 编写了这段代码 但它不起作用 session
  • 每行中非空列的计数

    我有一个包含 4 列的表 在第 5 列中我想存储前 4 列中有多少个非空列的计数 例如 其中 X 是任意值 Column1 Column2 Column3 Column4 Count X X NULL X 3 NULL NULL X X 2
  • 如何使用 dql 从数据表中获取唯一值?

    我有一个表 其中有一列存储了各种值 我想使用 dql 从该表中检索唯一值 Doctrine Query create gt select rec school gt from Records rec gt where rec city ci
  • 如何根据条件删除结果以计算平均值

    我有下面的架构 对其的快速解释是 鲍勃评分为 5 5 詹姆斯评分 1 5 梅西百货评分高达 5 5 逻辑 如果我是 A 请查找我屏蔽的所有人 查阅所有电影评论 任何留下电影评论且 personA 已屏蔽的人 请将其从计算中删除 计算电影的平
  • 按原样将 SQL 保存到 YAML

    我想以我自己的格式将 SQL 保存到 YAML 文件 如下所示 1 sql SELECT DISTINCT p id product p price AS price sp reduction AS discount FROM 我使用 YA
  • SQL 按计数排序

    如果我有一个表和这样的数据 ID Name Group 1 Apple A 2 Boy A 3 Cat B 4 Dog C 5 Elep C 6 Fish C 我希望根据 Group 的总和从小到大进行排序 例如 A 2条记录 B 1条记录
  • sql join 告诉我 ID 是否存在于其他表中

    我有 2 张桌子 A B ID FKID 1 3 2 3 3 4 4 4 我需要一个 select 语句 它显示 A 的所有内容 其中一个字段告诉我表 B 是否有任何与该 ID 匹配的 id Desired Result ID hasB 1
  • 为 java 项目创建安装

    我创建了一个 java 项目 它使用数据库来检索 编辑和保存数据 我使用 Netbeans 完成了该项目 现在我想在该项目之外创建一个安装 为此 我想包含与项目一起安装的数据库 我用来连接数据库的代码是 Class forName com
  • 优化 LATERAL join 中的慢速聚合

    在我的 PostgreSQL 9 6 2 数据库中 我有一个查询 该查询根据一些股票数据构建计算字段表 它为表中的每一行计算 1 到 10 年的移动平均窗口 并将其用于周期性调整 具体来说 CAPE CAPB CAPC CAPS 和 CAP
  • 使用转义换行符和回车符取消转义字符串

    我正在尝试编写一个 PLPGSQL 函数来混淆 审查 编辑文本 Obfuscate a body of text by replacing lowercase letters and numbers with symbols CREATE
  • 与 SQL 中的 IN 运算符相反

    我怎么能做相反的事情 换句话说 选择所有姓氏不是 Hansen 或 Pettersen 的人 WHERE lastname NOT IN Hansen Pettersen 请参阅 IN 和 NOT IN 运算符 部分SQLite 所理解的
  • 如何将彼此“接近”的纬度/经度点分组?

    我有一个用户提交的纬度 经度点的数据库 并且正在尝试将 接近 点分组在一起 接近 是相对的 但目前看来约为 500 英尺 起初 我似乎只能按前 3 个小数位具有相同纬度 经度的行进行分组 大约是一个 300x300 的盒子 了解当您远离赤道
  • 合并两个具有相同列名称的 MYSQL 表

    我有两张桌子 表一是计划时间 id edition time 1 1 9 23am 2 2 10 23am 表二为实际时间 id edition time 1 1 10 23am 2 2 11 23am 我想要的结果是 Caption Ed
  • SQL Server Like 查询不区分大小写

    Query SELECT from Table 2 WHERE name like Joe Output 1 100 Joe 2 200 JOE 3 300 jOE 4 400 joe 为什么不区分大小写 Problem 查询不区分大小写
  • 唯一约束与唯一索引?

    之间有区别吗 CREATE TABLE p product no integer name text UNIQUE price numeric and CREATE TABLE p product no integer name text
  • nvarchar 值“3001822585”的转换溢出了 int 列

    我使用以下方法将 Excel 文件导入到 SQL Server Excel 文件将所有值作为字符串 我可以导入文件 除了Barcode SalePrice and Price2 我收到错误 nvarchar 值 3001822585 条形码
  • 时间序列数据预处理 - numpy strides 技巧以节省内存

    我正在预处理一个时间序列数据集 将其形状从二维 数据点 特征 更改为三维 数据点 时间窗口 特征 在这样的视角中 时间窗口 有时也称为回顾 指示作为输入变量来预测下一个时间段的先前时间步长 数据点的数量 换句话说 时间窗口是机器学习算法在对
  • 如何在 PostgreSQL 中使用条件和子查询创建唯一索引?

    我使用 PGSQL 并尝试添加下面的索引 CREATE UNIQUE INDEX fk client ON user client fk client WHERE fk client NOT IN SELECT fk client FROM
  • 在 SQL 中按键组对行进行顺序编号?

    SQL中有没有办法按顺序添加行号按关键组 假设一个表包含任意 CODE NAME 元组 示例表 CODE NAME A Apple A Angel A Arizona B Bravo C Charlie C Cat D Dog D Dopp

随机推荐

  • 两个节点之间的设备树依赖关系

    我有两个设备树节点 一个设置 GPIO 引脚 另一个配置一个 i2c 总线 例如 gpio2 en gpio gpio hog gpios lt 5 0 gt output high i2c1 gpiom1 gpio 27 compatib
  • SQL Server:搜索所有表中的特定 GUID

    我发现需要清理一些数据 并且我需要找到一些特定的指南 即唯一标识符 在 SQL Server 我想出了一个存储过程SELECT从当前数据库中每个表的每个 uniqueidentifier 列中查找 如果找到 guid 则返回一个结果集 它使
  • 为什么 fs.createReadStream ... pipeline(res) 锁定读取文件?

    我正在使用 Express 传输音频和视频文件根据这个答案 https stackoverflow com a 24977085 304832 相关代码如下 function streamMedia filePath req res cod
  • 是否可以使用 ASP.NET MVC 创建登录系统但不使用会员提供程序?

    我有一个包含用户表的现有数据库 我们计划使用该数据库并将其用于在 ASP NET MVC 中构建的新系统 然而 我不确定的是我是否能够创建一个不使用内置帐户控制器或常规会员资格提供程序的登录系统 以便我们仍然可以使用现有的表结构 所以我的问
  • Javascript 发光/脉动效果在点击时停止

    我有以下 Javascript 来使文本链接连续发光 脉动 此链接显示同一页面的另一个部分 因此我希望它在用户单击它后停止 所以基本
  • NSDictionary 按浮点数形式对键进行排序

    基本上我有一个带有键和值的 NSDictionary 键都是数字 但目前它们是字符串 我希望能够将它们作为数字进行比较以便对它们进行排序 例如 如果我有这样的字典 100 gt id object 20 gt id object 10 gt
  • 在 ASP.NET MVC 应用程序中使用 HandleErrorAttribute

    我对在 MVC 5 应用程序中使用 HandleErrorAttribute 的最佳方式有疑问 众所周知 我们可以将此属性添加到全局过滤器中 如下所示 filters Add new HandleErrorAttribute View Er
  • 如何使用 jQuery 动态调用 javascript 对象的属性

    大家好 我有一个带有一些属性的 javascript 对象 比如说 function Animal this id this name 我需要以动态方式调用 id 函数来获取和设置它的值 像这样 Animal animal new Anim
  • 手工SHA-256,计算SHA-256初始单词

    我正在阅读出版物FIPS 180 4 https csrc nist gov csrc media publications fips 180 4 final documents fips180 4 draft aug2014 pdf并尝试
  • C# Databound ComboBox 自动更新

    我有一个绑定到数据库表的组合框 当用户将新数据插入表中时 我希望组合框自动更新以显示该数据 但是我不确定如何执行此操作 帮助将不胜感激 我的一个程序中有类似的东西 每当我的 datagridview 更新时 我都会清空组合框并重新填充它 大
  • 如何在另一个查询的 while 循环内运行 SQL 查询

    当 photoId 直接位于语句上而不是变量时 以下操作完全没有问题 img query mysqli query con SELECT FROM imgs WHERE photoid 103 or die mysqli error con
  • 模拟器打开时读取私人有效用户设置警告

    当我点击 textField 在 Xcode 中打开模拟器键盘时 会出现以下错误 2017 01 01 17 19 38 668544 FirebaseChat 12334 2921090 MC System group container
  • 信号处理程序返回到哪里?

    假设当接收并处理信号时 进程正在 main 方法中运行 当信号处理程序完成时 进程是否返回到 main 中接收信号的行 或者返回到信号调用 附 我知道我自己可以快速测试这一点 但当我无法访问我的电脑时 我就想到了这个想法 Thanks 当信
  • 在 Windows 7 上安装 Apache Solr 4.1 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我怎么能够安装apache solr
  • 与曼哈顿距离的距离变换 - Python / NumPy / SciPy

    我想使用 Python 和 Numpy 生成这样的二维数组 0 1 2 3 4 4 3 4 1 2 3 4 4 3 2 3 2 3 4 4 3 2 1 2 3 4 4 3 2 1 0 1 4 5 5 4 3 2 1 2 几乎数字从零开始左右
  • 何时使用关联实体?

    假设有两个实体 分别称为 Employee 和 Campaign 一名员工可以参与多项活动 一项活动可以有多名员工 我已经知道这是多对多的关系 在绘制 ER 图 Chen 表示法 时 这种关系用菱形来表示 但关联实体有一个单独的符号 它象征
  • CSS3 calc 函数:mod 运算符的问题

    我在用着 宽度 计算 100 mod 320 但它总是返回父元素的完整宽度 语法似乎没有任何问题 看起来像是一个支持问题 在 chrome 37 和 firefox 32 0 上测试 这里有一个fiddle http jsfiddle ne
  • CakePHP 2.1 使用包含条件进行查找

    我有以下型号 行业 ID 名称 Movie id name Industry id 行业有很多电影 Trailer id name movie id 电影有很多预告片 我需要为每个找到 6 个最新预告片Industry 每部电影不需要有预告
  • 类型错误:float() 参数必须是字符串或数字,而不是“函数” – Python/Sklearn

    我有一个名为 Flights py 的程序的以下代码片段 Load the Dataset df dataset df isnull any df df fillna lambda x x median Define X and Y X d
  • MySql查询时间间隔数据的直方图

    我有一个这种类型的事件输入 event user event start event end event type 插入到 MySql 表中 每个表都在自己的行中 以 user start 作为主键 我需要按时间间隔 例如分钟 查询类型的直