Đây là một giải pháp không có biến. Tôi giả sử bạn có dữ liệu initail của mình trong một bảng có tên là 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
Ở đây, chúng tôi nhận được giá trị trước đó với một lựa chọn phụ (kết quả result
trong số các dấu thời gian trước đó từ cùng một ip
). IFNULL
cho chúng tôi 0 nếu đây là giá trị đầu tiên, vì vậy kết quả ban đầu được hiển thị chính xác.
Tôi cũng khuyên bạn nên thêm chỉ mục sau vào thetable
:
CREATE INDEX sort1 ON thetable (ip, date, time);