当前位置: 首页 > 面试题库 >

MySQL GROUP BY DateTime +/- 3秒

臧彭亮
2023-03-14
问题内容

假设我有一个包含3列的表格:

  • id(PK,int)
  • 时间戳记(日期时间)
  • 标题(文字)

我有以下记录:

1, 2010-01-01 15:00:00, Some Title
2, 2010-01-01 15:00:02, Some Title
3, 2010-01-02 15:00:00, Some Title

我需要在彼此之间3秒钟之内进行GROUP BY记录。对于此表,第1行和第2行将组合在一起。

这里有一个类似的问题: Mysql
DateTime组15分钟

我也发现了这一点:http :
//www.artfulsoftware.com/infotree/queries.php#106

我不知道如何将这些方法转换为可以工作几秒钟的方法。SO问题上的方法的麻烦在于,在我看来,它仅适用于在已知点开始的时间范围内的记录。例如,如果我要FLOOR()以秒为单位工作,则以5秒为间隔,将15:00:04的时间与15:00:01分组,但不与15:00:06分组。

这有意义吗?请让我知道是否需要进一步说明。

编辑: 对于一组数字{1、2、3、4、5、6、7、50、51、60},看来最好将它们分组为{1、2、3、4、5,
6、7},{50、51},{60},以便每个分组行都取决于该行是否在上一行的3秒内。我知道这会改变一些情况,对此感到遗憾,我对此感到遗憾。

我正在尝试模糊匹配来自不同服务器的日志。服务器#1可能会记录一个项目“项目#1”,而服务器#2将在服务器#1的几秒钟内记录相同的项目“项目#1”。我需要在两条日志行上执行一些聚合函数。不幸的是,由于服务器软件的性质,我只有标题要继续。


问题答案:

我使用的是汤姆·H(Tom H.)的好主意,但在这里做的有点不同:

与其寻找一切在链的开始行的,我们可以发现所有的 时间 是链条的开端,然后回去ifnd符合时代的行。

此处的查询1可以通过找出3秒钟之内没有多少时间来告诉您哪个时间是链的起点。

SELECT DISTINCT Timestamp
FROM Table a
LEFT JOIN Table b
ON (b.Timestamp >= a.TimeStamp - INTERVAL 3 SECONDS
    AND b.Timestamp < a.Timestamp)
WHERE b.Timestamp IS NULL

然后,对于每一行,我们可以找到最大的链开始时间戳,该时间戳小于使用查询2的时间戳:

SELECT Table.id, MAX(StartOfChains.TimeStamp) AS ChainStartTime
FROM Table
JOIN ([query #1]) StartofChains
ON Table.Timestamp >= StartOfChains.TimeStamp
GROUP BY Table.id

一旦有了这些,我们就可以根据需要对它进行分组。

SELECT COUNT(*) --or whatever
FROM Table
JOIN ([query #2]) GroupingQuery
ON Table.id = GroupingQuery.id
GROUP BY GroupingQuery.ChainStartTime

我不确定这与Tom H的答案是否足够不同,可以单独发布,但是听起来您在实施方面遇到了麻烦,并且我正在考虑此事,因此我想再次发布。祝好运!



 类似资料:
  • 概述 支架可作为辅助件,配合单孔梁、双孔梁、方梁来搭建系统框架。 参数 厚度:2mm 材质:6061铝 尺寸图纸 搭建案例

  • 问题内容: 关于将由完整的Java EE应用程序服务器(例如GlassFish)提供服务的Java EE Web应用程序,这是最佳的 ORM 解决方案吗? EJB 3 或 Hibernate 3 为什么? 问题答案: 这两个完全不同。 是一个组件模型,与ORM直接无关。它确实有助于轻松管理事务,并使您可以轻松地从JPA访问实体管理器,JPA是Java EE中的标准化ORM解决方案。 (3)确实是一

  • 3

    过了个年,好久没碰专业内的东西了,之前做的JOS相关的东西都快忘了,还是看了前面两篇日志才想起来。 当进入内核后基本都是比较简单的代码了,我也并没有全部分析,根据讲义要求只分析了一下printf函数和堆栈的backtrace,所以这篇日志也就写这两个方面吧。 1、printf函数。 进入kernel后从i386_init函数开始,首先做一些初始化工作,包括部分内存的清零,初始化显示器串口等(无非是

  • 世人凭自己的智慧,既不认识神,神就乐意用人所当作愚拙的道理拯救那些信的人,这就是神的智慧了。犹太人是要神迹,希腊人是求智慧;我们却是传钉十字架的基督。(1 CORINTHIANS 1:21-22) 类(3) 在上一节中,对类有了基本的或者说是模糊的认识,为了能够对类有更深刻的认识,本节要深入到一些细节。 类属性 在交互模式下,创建一个简单的类。 >>> class A(object): #P

  • 在上一章我们用agent实现buckets。根据第一章所描述的设计,每个bucket应该被赋予名字, 从而可以这么去访问: CREATE shopping OK PUT shopping milk 1 OK GET shopping milk 1 OK 但是,由于agent是进程,每个bucket只有一个进程id(pid)而不是名字。 在《入门手册》中进程那章中提到过,我们可以给进程注册名字。 我

  • 为了节省时间,这个教程使用现有的历史记录作为本地数据库。 从这里下载 我们将用reset来删除master分支最前面的两个提交。 首先进入stepup-tutorial/tutorial3目录。本地端的历史记录的状态如下图显示。 用log命令确认历史记录。 $ git log commit 0d4a808c26908cd5fe4b6294a00150342d1a58be Author: yourn

  • 按钮是任何应用程序和应用程序的基本组件。App.js有几个内置的方便操作。任何带有类app-button的元素都将自动进行相应的样式化,并在按下适当的下状态时对触摸做出响应。 <div class="app-button">My button</div> 最常见的按钮位置之一是topbar。 <div class="app-topbar"> <div class="app-button lef

  • 模板HTML元素是一种非常常见的范例,虽然app.js在模板上没有任何专门的特性,但它绝对不会妨碍它。一般来说,你可以使用任何你想要的框架/库,如果你想在没有任何框架的情况下使用它,那么就会有一些模式让它变得简单: <!-- in your html --> <div class="app-page" data-page="contact"> <div class="app-topbar">