0Pricing
SQL Academy · Pelajaran

LAG, LEAD, dan Pola Deret Waktu

Bandingkan setiap baris dengan baris sebelumnya atau berikutnya menggunakan LAG dan LEAD, lalu buat perubahan antarkperiode.

LAG, LEAD, dan Pola Deret Waktu adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.

LAG dan LEAD: Melihat ke Belakang / ke Depan

Fungsi ini mengakses baris di sekitar dalam jendela:

  • LAG(col, n, default) — nilai n baris sebelum baris saat ini
  • LEAD(col, n, default) — nilai n baris setelahnya

Baris Sebelumnya

Bandingkan setiap pesanan dengan pesanan sebelumnya untuk pengguna yang sama:

SELECT id, user_id, created_at, total,
       LAG(total) OVER (
         PARTITION BY user_id ORDER BY created_at
       ) AS prev_total
FROM orders;

Perubahan dari Hari ke Hari

Selisih dari hari sebelumnya:

SELECT day, revenue,
       revenue - LAG(revenue) OVER (ORDER BY day) AS delta
FROM daily_revenue
ORDER BY day;

Perubahan dari Tahun ke Tahun

LAG dengan offset 12 pada rangkaian bulanan:

SELECT month, revenue,
       LAG(revenue, 12) OVER (ORDER BY month) AS prev_year_revenue,
       revenue / NULLIF(LAG(revenue, 12) OVER (ORDER BY month), 0) - 1 AS yoy
FROM monthly_revenue;

Mendeteksi Celah

Temukan hari yang datanya hilang:

WITH d AS (
  SELECT day, LAG(day) OVER (ORDER BY day) AS prev_day FROM daily_signups
)
SELECT day, prev_day, day - prev_day AS gap_days
FROM d
WHERE day - prev_day > 1;

Pembentukan Sesi

Kelompokkan baris ke dalam sesi ketika celah melebihi ambang batas:

WITH gaps AS (
  SELECT user_id, ts,
         CASE WHEN ts - LAG(ts) OVER (PARTITION BY user_id ORDER BY ts)
                 > INTERVAL '30 min'
              THEN 1 ELSE 0 END AS new_session
  FROM events
)
SELECT user_id, ts,
       SUM(new_session) OVER (PARTITION BY user_id ORDER BY ts) AS session_id
FROM gaps;

Nilai Pertama dan Terakhir dalam Grup

FIRST_VALUE dan LAST_VALUE mengambil batas-batas jendela:

SELECT id, total,
       FIRST_VALUE(total) OVER (PARTITION BY user_id ORDER BY created_at) AS first_order,
       LAST_VALUE(total)  OVER (PARTITION BY user_id ORDER BY created_at
         ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS last_order
FROM orders;
-- LAST_VALUE needs the explicit frame, otherwise default frame ends at current row.

NTH_VALUE

Pilih nilai ke-N dalam partisi:

SELECT id,
       NTH_VALUE(total, 2) OVER (
         PARTITION BY user_id ORDER BY total DESC
         ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
       ) AS second_largest
FROM orders;

Nilai Bawaan Deret Waktu

Argumen ketiga LAG adalah nilai bawaan ketika tidak ada baris sebelumnya:

SELECT day, revenue,
       revenue - LAG(revenue, 1, 0) OVER (ORDER BY day) AS delta
FROM daily_revenue;
-- delta on first day = revenue itself (vs NULL)

Padanan Penggabungan dengan Tabel Itu Sendiri

Anda dapat menulis LAG sebagai penggabungan tabel dengan tabel itu sendiri, tetapi hasilnya akan lebih lambat dan lebih buruk. Selalu utamakan fungsi jendela.

Kinerja

Fungsi jendela menelusuri partisi satu kali. Hambatannya adalah pengurutan — buat indeks pada kolom ORDER BY jika memungkinkan.

Ringkasan

LAG dan LEAD memungkinkan perbandingan antarbariѕ.

  • Sebelumnya/berikutnya dalam partisi
  • Perubahan, perbandingan antarperiode, pembentukan sesi
  • FIRST_VALUE/LAST_VALUE untuk batas

Pemeriksaan Singkat

Anda ingin menghitung perubahan pendapatan dari hari ke hari. Fungsi jendela mana yang digunakan?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “LAG, LEAD, dan Pola Deret Waktu” gratis?

Ya — teks lengkap “LAG, LEAD, dan Pola Deret Waktu” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “LAG, LEAD, dan Pola Deret Waktu”?

Bandingkan setiap baris dengan baris sebelumnya atau berikutnya menggunakan LAG dan LEAD, lalu buat perubahan antarkperiode. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Academy?

Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “LAG, LEAD, dan Pola Deret Waktu” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. OVER, PARTITION BY, ORDER BY
  2. ROW_NUMBER, RANK, DENSE_RANK
  3. LAG, LEAD, dan Pola Deret Waktu
  4. Total Berjalan dan Rata-Rata Bergerak
← Kembali ke SQL Academy