sql >> Database >  >> RDS >> PostgreSQL

Trek twee records van dezelfde kolom in een tabel af

Je hebt een manier nodig om de volgorde van rijen in score te bepalen . Er is geen "natuurlijke volgorde" in een tabel in een relationele database. Dus ik neem aan dat je een id . hebt (of een tijdstempel of zoiets) om uw records te bestellen. Of is i gegarandeerd groter zijn in elke nieuwe rij? Dan kun je gewoon bestellen via i .

De vraag zelf is eenvoudig - zodra u meer te weten komt over window functies :

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

Inclusief een verbetering door @Clodoaldo (zie opmerking).

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

is gelijk aan, maar eleganter dan:

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

Het doel is om het speciale geval van de eerste rij zonder voorgaande rij te behandelen.
Demo op sqlfiddle.

sum(result) is triviaal omdat het gelijk is aan de laatste i volgens uw beschrijving:

SELECT i
FROM   score
ORDER  BY id DESC
LIMIT  1;


  1. Kolommen bijwerken met null-waarden

  2. Is er een datavisualisatietool voor postgresql die ook inter-schemarelaties kan weergeven?

  3. MySQL-draaitabel met dynamische koppen op basis van gegevens uit één kolom

  4. Hoe het aantal rijen voor alle tabellen in een SQL SERVER-database op te halen