Bạn cần một số cách để xác định trình tự các hàng trong score
. Không có "thứ tự tự nhiên" trong một bảng trong cơ sở dữ liệu quan hệ. Vì vậy, tôi giả sử bạn có id
(hoặc dấu thời gian hoặc thứ gì đó) để sắp xếp hồ sơ của bạn trước. Hay là i
đảm bảo sẽ lớn hơn trong mỗi hàng mới? Sau đó, bạn chỉ cần đặt hàng theo i
.
Bản thân truy vấn rất đơn giản - khi bạn tìm hiểu về cửa sổ chức năng :
SELECT i - lag(i, 1, 0) OVER (ORDER BY id) AS result
FROM score
ORDER BY id;
Bao gồm một cải tiến của @Clodoaldo (xem bình luận).
lag(i, 1, 0) OVER (ORDER BY id)
tương đương với, nhưng thanh lịch hơn:
COALESCE(lag(i) OVER (ORDER BY id), 0)
Mục đích là để bao gồm trường hợp đặc biệt của hàng đầu tiên không có hàng trước.
Bản trình diễn trên sqlfiddle.
sum(result)
là tầm thường vì nó bị ràng buộc bằng i
cuối cùng theo mô tả của bạn:
SELECT i
FROM score
ORDER BY id DESC
LIMIT 1;