我有一个带有列的InnoDB表'idtimes'(MySQL 5.0.22-log)
`id` int(11) NOT NULL,
`time` int(20) NOT NULL, [...]
用复合唯一键
UNIQUE KEY `id_time` (`id`,`time`)
因此每个ID可以有多个时间戳,每个时间戳可以有多个ID。
我正在尝试建立一个查询,以获取所有条目以及每个条目的下一个较大时间(如果存在),因此它应返回例如:
+-----+------------+------------+
| id | time | nexttime |
+-----+------------+------------+
| 155 | 1300000000 | 1311111111 |
| 155 | 1311111111 | 1322222222 |
| 155 | 1322222222 | NULL |
| 156 | 1312345678 | 1318765432 |
| 156 | 1318765432 | NULL |
+-----+------------+------------+
现在,我到目前为止:
SELECT l.id, l.time, r.time FROM
idtimes AS l LEFT JOIN idtimes AS r ON l.id = r.id
WHERE l.time < r.time ORDER BY l.id ASC, l.time ASC;
但这当然会返回r.time> l.time的所有行,而不仅是第一个...
我想我需要像
SELECT outer.id, outer.time,
(SELECT time FROM idtimes WHERE id = outer.id AND time > outer.time
ORDER BY time ASC LIMIT 1)
FROM idtimes AS outer ORDER BY outer.id ASC, outer.time ASC;
但是我不知道如何引用当前时间(我知道上面的SQL无效)。
如何使用单个查询做到这一点(并且我不希望使用不依赖于一次遍历表并记住最后一个值的@variables)?
is null
i和i3的联接where not exists (select 1 from itimes i3 where [same clause])
,那么代码将更紧密地反映我们要表达的内容。