gpt4 book ai didi

mysql - 根据最后插入的记录按时间间隔分组

转载 作者:行者123 更新时间:2023-11-30 21:53:08 26 4
gpt4 key购买 nike

我有一个看起来像这样的数据集:

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,所以我希望它从集合的最后一条记录开始。

最佳答案

找到了解决方案,@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”使用子查询也对性能产生了非常大的影响。

关于mysql - 根据最后插入的记录按时间间隔分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46317600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com