当前位置: 首页 > 知识库问答 >
问题:

按上次插入记录的时间间隔分组

陈增
2023-03-14

我得到的数据集如下所示:

localDateTime       |bid 
--------------------|--------
2017-09-17 15:35:05 |3085    
2017-09-17 15:35:54 |3100    
2017-09-17 15:37:05 |3100.2  
2017-09-17 15:38:06 |3101.6  
etc..

我想按时间字段对其进行分组,并获取每个时间间隔的MAX(openBid),并拥有最后5个间隔(在本例中为5分钟)。我使用这个查询:

SELECT
    MIN(localDateTime) startTime
    ,MAX(bid) maxOpenBid
    ,COUNT(*) countRecords
FROM
    Ticker
GROUP BY
    UNIX_TIMESTAMP(localDateTime) DIV 300
ORDER BY ID DESC
LIMIT 5 

结果如下:

startTime           |maxOpenBid |countRecords
--------------------|-----------|------------
2017-09-20 10:50:03 |3306.9     |3           
2017-09-20 10:45:03 |3305       |5           
2017-09-20 10:40:04 |3304.9     |5           
2017-09-20 10:35:04 |3306       |5           
2017-09-20 10:30:03 |3303.2     |5           

我遇到的问题是,随着时间的推移,结果集中第一条记录的计数从1增加到5。在这个例子中,它是3。我希望我的查询在所有时间间隔内都有相同数量的记录。我认为问题是GROUP BY准时从集合的第一条记录开始。由于我正在执行ORDER BY DESC,我希望它从集合的最后一条记录开始。

共有1个答案

黄流觞
2023-03-14

找到了解决办法,@wally让我找到了正确的方向。

以下是我所做的工作:

SET @rownr =-1;  
SELECT
    MIN(localDateTime) startTime
    ,MAX(bid) maxOpenBid
    ,COUNT(*) countRecords
FROM
    (
    SELECT 
        (@rownr := (@rownr+1)) rownr
        ,ID
        ,localDateTime
        ,bid openBid
        ,ask openAsk
    FROM
        Ticker
    ORDER BY ID DESC
    LIMIT 25
    ) Ticker
GROUP BY
    FLOOR(rownr/5)
ORDER BY ID DESC
LIMIT 5 

通过生成按PK排序的子集,为“Ticker”使用子查询也对性能产生了非常大的影响。

 类似资料:
  • 问题内容: 我有一个包含datetime列和一些其他列的表。datetime列表示发生的事件。它可以包含一个时间(事件在那个时间发生)或NULL(事件没有发生) 我现在想计算在特定时间间隔(15分钟)内发生的记录数,但是不知道该怎么做。 例子: 现在,我想创建一个查询,该查询将创建类似于以下内容的结果集: 这在SQL中可能吗,或者有人可以建议我可以使用哪些其他工具?(例如,将数据导出到电子表格程序

  • 问题内容: 我需要将表分组为15分钟间隔。我可以这样做: 但是要在图表中显示返回的数据,我还需要插入没有任何数据且当前未出现在我的select语句中的间隔。我该如何插入这些? 问题答案: 用15分钟的增量创建一个带有所有可能时间戳的表,然后从该表向上面的查询进行LEFT JOIN。 如果您知道图表始终涵盖24小时,则只需创建一个数字为0-95的表格,然后为每个条目将其添加到图表的开始时间。

  • 问题内容: 我有一个数据集: 我想基本上在一个小时内“拆分”这些时间间隔,例如: 到目前为止,这是我的代码(该想法的积分发给@DumitrescuBogdan,将通话数据分为15分钟间隔): 后半部分(在“全部合并”之后)不产生任何结果,前半部分产生以下结果: 谢谢,我是初学者。我了解第一部分;坦白地说,我不明白下半场 我愿意接受其他解决方案。 我正在使用MS-Access 2010 问题答案:

  • 问题内容: 我有一个这样的表: 我需要一个查询以n分钟的间隔对记录进行分组。 例如,输出(按60分钟分组): 到目前为止,由于间隔介于0到60分钟之间,因此我一直在使用此查询按10分钟间隔进行分组: 但是现在间隔可以是例如 125436758 分钟。 我无法创建新表,并且用户定义的间隔必须为n分钟。我正在使用SQL SERVER2012。谢谢。 问题答案:

  • 问题内容: 我有一列称为“ s_timestamp”。 如何返回时间戳中具有当天的所有记录? 例如, 我想要以下输出: 让我知道是否不清楚。 问题答案: 只是使用。例如 日期() CURDATE()

  • 问题内容: 我有一个可能每天运行几次的应用程序。每次运行都会生成写入表的数据,以报告发生的事件。主报告表如下所示: 我可以说有两次运行,但是我想要一种能够查询日期范围(运行过程的次数)的方法。我想查询一个查询,该查询导致进程开始的时间和组中的文件数。这种查询可以让我了解我想要的东西,因为我可以看到什么日期和时间以及运行了多少文件,但不完全是我想要的。例如,它不能适应从8:58到9:04的运行。例如