【发布时间】:2019-01-14 05:44:35
【问题描述】:
我在构建 MySQL 语句时需要帮助,我需要在同一个表中查找以前的行。
我的数据如下所示:
history_id(自动递增)、object_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 的时间戳就越晚
- 一个object_id可能只有一行
- object_id 和时间戳的组合始终是唯一的,不能重复
对于每一行,我需要找到具有相同 object_id 的最近一行。
我找到了这篇文章:https://dba.stackexchange.com/questions/24014/how-do-i-get-the-current-and-next-greater-value-in-one-select 并通过了示例,但我无法解决我的问题。
我只是测试了一下,就到了这一点:
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 值,但当我使用限制 1 时它不起作用,因为那样我只会得到一个值。
您对如何解决这个问题有任何想法吗?或者您可能有更好、更有效的技术?
性能很重要,因为我有 310 万行越来越高..
谢谢!
【问题讨论】:
标签: mysql join row identifier next