最后插入记录的时间间隔组

时间:2017-09-20 08:59:03

标签: mysql sql

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

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 个答案:

答案 0 :(得分:0)

找到了解决方案,@ 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 

使用“Ticker”子查询通过生成PK排序的子集对性能产生了很大的影响。