PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Odejmij dwa rekordy z tej samej kolumny w tabeli

Potrzebujesz sposobu na określenie kolejności wierszy w score . W tabeli w relacyjnej bazie danych nie ma „naturalnego porządku”. Zakładam więc, że masz id (lub sygnaturę czasową lub coś w tym rodzaju), aby zamówić swoje rekordy. Czy też jest i gwarantuje, że będzie większy w każdym nowym rzędzie? Następnie możesz po prostu zamówić przez i .

Samo zapytanie jest proste - gdy dowiesz się o window funkcje :

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

W tym ulepszenie @Clodoaldo (patrz komentarz).

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

jest równoważny, ale bardziej elegancki niż:

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

Celem jest uwzględnienie szczególnego przypadku pierwszego wiersza, który nie ma poprzedzającego wiersza.
Demo na sqlfiddle.

sum(result) jest trywialne, ponieważ jest związane z ostatnim i zgodnie z twoim opisem:

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. Jak pracować z bazami danych PostgreSQL

  2. Prawidłowe wstawienie nazwy tabeli

  3. Kolumna postgreSQL nie istnieje, gdzie foo jest wartością

  4. W obronie sar (i jak to skonfigurować)

  5. Dlaczego PostgreSQL wielokrotnie wywołuje moją funkcję STABILNA/NIEZMIENNA?