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

Bagaimana cara menggabungkan tabel dengan cara setiap record digabungkan dengan record sebelumnya?

Salah satu opsi adalah menggunakan cte rekursif (jika saya memahami persyaratan Anda dengan benar):

WITH RNCTE AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date) rn
        FROM quotes
  ),
CTE AS (
  SELECT symbol, date, rn, cast(0 as decimal(10,2)) perc, closed
  FROM RNCTE
  WHERE rn = 1
  UNION ALL
  SELECT r.symbol, r.date, r.rn, cast(c.closed/r.closed as decimal(10,2)) perc, r.closed
  FROM CTE c 
    JOIN RNCTE r on c.symbol = r.symbol AND c.rn+1 = r.rn
  )
SELECT * FROM CTE
ORDER BY symbol, date

Demo Fiddle SQL

Jika Anda memerlukan total berjalan untuk setiap simbol untuk digunakan sebagai persentase perubahan, maka cukup mudah untuk menambahkan kolom tambahan untuk jumlah itu -- tidak sepenuhnya yakin apa niat Anda, jadi di atas hanya membagi jumlah yang ditutup saat ini dengan jumlah yang ditutup sebelumnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang mengunci | sumber daya buffer komunikasi berarti?

  2. MS SQL Server - Kapan KURSOR bagus?

  3. Cara menggunakan UPDATE dari SELECT di SQL Server

  4. Memisahkan Tanggal menjadi 2 Kolom (Tanggal + Waktu) dalam SQL

  5. Bagaimana cara mengimpor spreadsheet Excel ke database SQL Server 2008R2?