Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara mendapatkan perbedaan antara dua baris untuk bidang kolom?

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)

EDIT:

Memikirkannya, menggunakan subquery di pilih (jawaban ala Quassnoi) mungkin lebih efisien. Saya akan mencoba versi yang berbeda, dan melihat rencana eksekusi untuk melihat mana yang berkinerja terbaik pada ukuran kumpulan data yang Anda miliki...


EDIT2:

Saya masih melihat ini mengumpulkan suara, meskipun tidak banyak orang yang masih menggunakan SQL Server 2005.

Jika Anda memiliki akses ke Fungsi Berjendela seperti LEAD() , lalu gunakan itu sebagai gantinya...

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membagi nilai kolom tunggal menjadi beberapa nilai kolom?

  2. Periksa apakah Tabel Direferensikan oleh Kunci Asing di SQL Server dengan OBJECTPROPERTY()

  3. Cara terbaik untuk menangkap pelanggaran batasan unik sql di c # selama penyisipan

  4. Hitung SQL (*) kinerja

  5. Pivot data di T-SQL