PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kurangi dua record dari kolom yang sama dalam sebuah tabel

Anda memerlukan beberapa cara untuk menentukan urutan baris dalam score . Tidak ada "tatanan alami" dalam tabel dalam database relasional. Jadi saya berasumsi Anda memiliki id (atau stempel waktu atau sesuatu) untuk memesan catatan Anda. Atau i dijamin lebih besar di setiap baris baru? Kemudian Anda bisa memesan dengan i .

Kuerinya sendiri sederhana - setelah Anda mengetahui tentang window fungsi :

SELECT i - lag(i, 1, 0) OVER (ORDER BY id) AS result
FROM   score
ORDER  BY id;

Termasuk peningkatan oleh @Clodoaldo (lihat komentar).

lag(i, 1, 0) OVER (ORDER BY id)

setara dengan, tetapi lebih elegan dari:

COALESCE(lag(i) OVER (ORDER BY id), 0)

Tujuannya adalah untuk menutupi kasus khusus dari baris pertama yang tidak memiliki baris sebelumnya.
Demo di sqlfiddle.

sum(result) sepele karena terikat sama dengan i terakhir sesuai dengan deskripsi Anda:

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. rails 3.2.2 (atau 3.2.1) + Postgresql 9.1.3 + Ubuntu 11.10 Kesalahan koneksi

  2. PostgreSQL - menerapkan antrian yang andal

  3. Gabung di beberapa tabel menggunakan on . yang berbeda

  4. Batas Kata Regex PostgreSQL?

  5. Deklarasikan variabel tipe baris di PL/pgSQL