Berikut adalah solusi tanpa variabel. Saya berasumsi Anda memiliki data initail Anda dalam tabel yang disebut thetable
.
SELECT date, time, ip,
result - IFNULL( (
SELECT MAX( result )
FROM thetable
WHERE ip = t1.ip
AND ( date < t1.date
OR date = t1.date AND time < t1.time )
) , 0) AS diff
FROM thetable AS t1
ORDER BY ip, date, time
Di sini kita mendapatkan nilai sebelumnya dengan subselect (result
maksimal dari stempel waktu sebelumnya dari ip
. yang sama ). IFNULL
memberi kita 0 jika ini adalah nilai pertama, sehingga hasil awal ditampilkan dengan benar.
Saya juga merekomendasikan untuk menambahkan indeks berikut ke thetable
:
CREATE INDEX sort1 ON thetable (ip, date, time);