PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Извадете два записа от една и съща колона в таблица

Трябва ви някакъв начин да определите последователността от редове в score . Няма "естествен ред" в таблица в релационна база данни. Така че предполагам, че имате id (или клеймо за време или нещо подобно), по които да подредите записите си. Или е i гарантирано ще бъде по-голям във всеки нов ред? След това можете просто да поръчате чрез i .

Самата заявка е проста - след като разберете за window функциите :

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

Включително подобрение от @Clodoaldo (вижте коментара).

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

е еквивалентен на, но по-елегантен от:

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

Целта е да се покрие специалният случай на първия ред, който няма предходен ред.
Демо на sqlfiddle.

sum(result) е тривиално, защото е обвързано да е равно на последното i според вашето описание:

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. psql:ФАТАЛНО:твърде много връзки за роля

  2. Да има булев тип в Postgres за PHP

  3. Правилен начин за използване на копие Postgres jdbc

  4. Не мога да генерирам файлове за картографиране на Hibernate и POJO от база данни PostgreSQL?

  5. PG::ConnectionBad (ФАТАЛНО:pg_hba.conf отхвърля връзката за хост 172.17.0.1, потребител XXX, база данни XXX, SSL изключен):