sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan får man forskel mellem to rækker til et kolonnefelt?

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)

REDIGERING:

Når man tænker over det, kan det være mere effektivt at bruge en underforespørgsel i select (ala Quassnois svar). Jeg ville prøve forskellige versioner og se på udførelsesplanerne for at se, hvilken der ville fungere bedst på størrelsen af ​​det datasæt, du har...


EDIT2:

Jeg ser stadig, at dette får stemmer, selvom det er usandsynligt, at mange mennesker stadig bruger SQL Server 2005.

Hvis du har adgang til Windowed-funktioner såsom LEAD() , så brug det i stedet...

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


  1. Oracle Database Security:Databaserevision

  2. Annoncerer Barman 1.0, Backup and Recovery Manager for PostgreSQL

  3. Modellering af en database til registrering af salg. Del 1

  4. Hvad er forskellen mellem MS Access og SQL?