sql >> Databáze >  >> RDS >> Sqlserver

Jak získat rozdíl mezi dvěma řádky pro sloupcové pole?

SELECT
   [current].rowInt,
   [current].Value,
   ISNULL([next].Value, 0) - [current].Value
FROM
   sourceTable       AS [current]
LEFT JOIN
   sourceTable       AS [next]
      ON [next].rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > [current].rowInt)

UPRAVIT:

Když se nad tím zamyslíte, použití poddotazu ve výběru (ala Quassnoiova odpověď) může být efektivnější. Zkusil bych různé verze a podíval se na prováděcí plány, abych zjistil, která by fungovala nejlépe s ohledem na velikost souboru dat, který máte...


EDITACE 2:

Stále vidím, že to sbírá hlasy, i když je nepravděpodobné, že mnoho lidí stále používá SQL Server 2005.

Pokud máte přístup k funkcím v okně, jako je LEAD() , pak místo toho použijte...

SELECT
  RowInt,
  Value,
  LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value
FROM
  sourceTable


  1. PlanetScale &Vitess:Referenční integrita se staršími sdílenými databázemi

  2. Neo4j - Pusťte index pomocí Cypher

  3. Je možné spustit skript SQLPLUS na souboru kódovaném jako UTF-8 s kusovníkem

  4. ORA-01264:Nelze vytvořit název souboru protokolu