PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Trừ hai bản ghi của cùng một cột trong một bảng

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lập chỉ mục một cột mảng chuỗi cho truy vấn pg_trgm `'term'% ANY (array_column)`?

  2. Làm thế nào để chỉ cho phép một hàng cho một bảng?

  3. Nhận Mã thông báo truy cập cho kết nối với PostgreSQL trong Azure Functions

  4. Sqlalchemy và PostgreSql:Làm thế nào để đặt khóa chính theo cách thủ công mà không có xung đột trong tương lai?

  5. Chỉ mục đa cột trên 3 trường có kiểu dữ liệu không đồng nhất