【发布时间】:2020-08-18 03:46:48
【问题描述】:
我的数据库有两列 ID 和 Timestamp。
4 1597228600
8 1597228700
12 1597228700
11 1597228800
14 1597228800
9 1597228900
10 1597228900
1 1597228900
2 1597229000
我需要获取给定 id 和时间戳的下一个(上一个)记录,按时间戳排序。如果时间戳有重复,则应该返回id较高(较低)的记录。
在示例中 11(1597228800) 的 Next 和 Prev 记录是 14 和 12。14(1597228800) 的 Next 和 Prev 记录是 1 和 11。
我尝试在子查询中使用 CASE 条件,但是这个解决方案有问题
SELECT id
FROM tbl
WHERE timestamp_value >= '1597228800'
AND id > (case when ( SELECT min(id) min_id FROM tbl WHERE id > 11 AND timestamp_value = 1597228800) is null then 0 else 11 end)
ORDER BY timestamp_value
LIMIT 1
【问题讨论】:
-
14 是 11 的下一条记录。说明:14 和 11 的记录具有相同的时间戳,因此具有相同时间戳的 id 较高的记录是下一个,在当前示例中为 14 .
-
你的MySql是什么版本的?
-
MySQL 版本为 5.7
-
所以如果所有时间戳都相等,那么我们只是按 id 排序?
-
@Strawberry 是的。但是在示例中,一些 ID 较低的记录具有较高的时间戳,所以我不能使用 ID 作为 ORDER BY 语句中的第二个参数。
标签: mysql performance