Sütunları ile bir InnoDB tablo 'idtimes' (MySQL 5.0.22-log) var
`id` int(11) NOT NULL,
`time` int(20) NOT NULL, [...]
bileşik benzersiz bir anahtarla
UNIQUE KEY `id_time` (`id`,`time`)
böylece kimlik başına birden çok zaman damgası ve zaman damgası başına birden çok kimlik olabilir.
Varsa, bu yüzden tüm girişleri artı her giriş için bir sonraki büyük zaman almak bir sorgu kurmaya çalışıyorum, bu yüzden örneğin dönmelidir:
+-----+------------+------------+
| id | time | nexttime |
+-----+------------+------------+
| 155 | 1300000000 | 1311111111 |
| 155 | 1311111111 | 1322222222 |
| 155 | 1322222222 | NULL |
| 156 | 1312345678 | 1318765432 |
| 156 | 1318765432 | NULL |
+-----+------------+------------+
Şu an şimdiye kadar:
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;
ama elbette bu r.time> l.time ile tüm satırları döndürür ve sadece birincisini değil ...
Sanırım bir alt seçime ihtiyacım olacak
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;
ama nasıl şimdiki zaman başvurmak bilmiyorum (yukarıdaki geçerli SQL olmadığını biliyorum).
Bunu tek bir sorgu ile nasıl yaparım (ve her seferinde tablo bir satır adım adım ve son değeri hatırlamak bağlı @ değişkenler kullanmayı tercih etmem)?
is null
ve i3 ile birleşmeyi değiştirirsek,where not exists (select 1 from itimes i3 where [same clause])
kodun ifade etmek istediğimizi daha yakından yansıtacağını düşünüyorum.