sql >> Databáze >  >> RDS >> PostgreSQL

Odečtěte dva záznamy stejného sloupce v tabulce

Potřebujete nějaký způsob, jak určit pořadí řádků v score . V tabulce v relační databázi neexistuje žádný "přirozený řád". Předpokládám tedy, že máte id (nebo časové razítko nebo tak něco), podle kterého si můžete své záznamy objednat. Nebo je i zaručeně větší v každé nové řadě? Pak už stačí objednat podle i .

Samotný dotaz je jednoduchý – jakmile zjistíte o okně funkce :

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

Včetně vylepšení od @Clodoaldo (viz komentář).

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

je ekvivalentní, ale elegantnější než:

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

Účelem je pokrýt speciální případ prvního řádku, který nemá žádný předchozí řádek.
Demo na sqlfiddle.

sum(result) je triviální, protože se musí rovnat poslednímu i podle vašeho popisu:

SELECT i
FROM   score
ORDER  BY id DESC
LIMIT  1;


  1. Monitorování distribuce Percona pro PostgreSQL – klíčové metriky

  2. MySQL nahradí všechny mezery za -

  3. Nahrání fotografií CodeIgniter

  4. Jak opravit adresu URL poskytovatele obsahu, která nebyla nalezena v poskytovateli obsahu pro Android?