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

Fungsi Lead() dan LAG() di SQL Server 2008

Anda berada di jalur yang benar dengan bergabung dengan tabel itu sendiri. Saya menyertakan 2 metode untuk melakukan ini di bawah ini yang seharusnya berfungsi dengan baik di sini. Trik pertama ada di ROW_NUMBER your , pastikan untuk mempartisi berdasarkan id pengguna dan urutkan berdasarkan tanggal. Kemudian Anda dapat menggunakan INNER JOIN dengan agregasi atau CROSS APPLY untuk membangun total lari Anda.

Menyiapkan data dengan ROW_NUMBER() yang dipartisi :

DECLARE @Data TABLE (
    RowNum INT,
    UserId INT,
    Date DATE,
    Miles INT
)
INSERT @Data 
    SELECT
        ROW_NUMBER() OVER (PARTITION BY UserId
            ORDER BY Date) AS RowNum,
        *
    FROM (
        SELECT 1, '2015-01-01', 5
        UNION ALL SELECT 1, '2015-01-02', 6
        UNION ALL SELECT 2, '2015-01-01', 7
        UNION ALL SELECT 2, '2015-01-02', 3
        UNION ALL SELECT 2, '2015-01-03', 2
        ) T (UserId, Date, Miles)

Gunakan INNER JOIN dengan Agregasi

SELECT
    D1.UserId,
    D1.Date,
    D1.Miles,
    SUM(D2.Miles) AS [Total]
FROM @Data D1
    INNER JOIN @Data D2
        ON D1.UserId = D2.UserId
            AND D2.RowNum <= D1.RowNum
GROUP BY
    D1.UserId,
    D1.Date,
    D1.Miles

Gunakan CROSS APPLY untuk total berjalan

SELECT
    UserId,
    Date,
    Miles,
    Total
FROM @Data D1
    CROSS APPLY (
        SELECT SUM(Miles) AS Total
        FROM @Data
        WHERE UserId = D1.UserId
            AND RowNum <= D1.RowNum
    ) RunningTotal

Keluaran sama untuk setiap metode:

UserId      Date       Miles       Total
----------- ---------- ----------- -----------
1           2015-01-01 5           5
1           2015-01-02 6           11
2           2015-01-01 7           7
2           2015-01-02 3           10
2           2015-01-03 2           12



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengatur Spotlight Cloud dan Memecahkan Masalah SQL Server secara Efisien

  2. Buat pekerjaan SQL Server secara otomatis

  3. Dapatkan hanya tanggal dari datetime sql tanpa mengonversi ke varchar sehingga saya dapat mengurutkannya di excel

  4. Menggabungkan nilai baris T-SQL

  5. Jumlah minggu dan sebagian minggu antara dua hari dihitung salah