在构造mysql语句时需要帮助,在该语句中,我需要查找同一表中的前几行。
我的数据如下:
历史ID(自动递增)、对象ID(存在多次)、时间戳…
例子:
1, 2593, 2018-08-07 09:37:21
2, 2593, 2018-08-07 09:52:54
3, 15, 2018-08-07 10:41:15
4, 2593, 2018-08-07 09:57:36
此数据的某些属性:
自动增量越高,相同对象id的时间戳越晚
一个对象id可能只有一行
对象id和时间戳的组合总是唯一的,不可能重复
对于每一行,我需要找到具有相同对象id的前一行。
我只是做了一些测试,然后说到了这一点:
SELECT
i1.history_id,
i1.object_id,
i1.timestamp AS state_time,
i2.timestamp AS previous_time
FROM
history AS i1
LEFT JOIN (
select timestamp as timestamp,history_id as history_id,object_id as object_id
from history
group by object_id
) AS i2 on i2.object_id = i1.object_id and i2.history_id < i1.history_id
现在,我只需要剪切子查询,即我只为每一行获取history_id的最高值,但当我使用limit 1时它不起作用,因为这样我将只获得一个值。
你知道怎么解决这个问题吗?或者你有更好更有效的技术?
性能是一个关键点,因为我有310万行的数据增长得更高。
谢谢您!