sql >> Database teknologi >  >> RDS >> PostgreSQL

Træk to poster fra samme kolonne i en tabel fra

Du har brug for en måde at bestemme rækkefølgen af ​​rækker i score . Der er ingen "naturlig orden" i en tabel i en relationsdatabase. Så jeg antager, at du har et id (eller et tidsstempel eller noget) for at bestille dine poster efter. Eller er i garanteret at være større i hver ny række? Så kan du bare bestille efter i .

Selve forespørgslen er enkel - når du først finder ud af vinduet funktioner :

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

Herunder en forbedring af @Clodoaldo (se kommentar).

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

svarer til, men mere elegant end:

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

Formålet er at dække det særlige tilfælde af den første række, der ikke har nogen forudgående række.
Demo på sqlfiddle.

sum(result) er trivielt, fordi det er bundet til at være lig med den sidste i ifølge din beskrivelse:

SELECT i
FROM   score
ORDER  BY id DESC
LIMIT  1;


  1. Hvordan man skriver en PL/SQL-procedure med x inputparametre og input/output af x parametre kombineret

  2. PHP mysqli forberedt erklæring til lagret procedure uden parameter

  3. Flytning af eksisterende tabel fra primær filgruppe til en anden filgruppe

  4. Konverter sql række til kolonner