Menghitung Jarak Hari Antar Order di SQL
Blog/Tutorial SQL/Menghitung Jarak Hari Antar Order di SQL

Menghitung Jarak Hari Antar Order di SQL

BimaBima
·26 September 2026·9 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Menghitung jarak hari antar order di SQL paling gampang pakai fungsi window LAG. LAG ngambil tanggal order sebelumnya per pelanggan, lalu kamu kurangin dari tanggal order sekarang buat dapat selisih hari. Kuncinya PARTITION BY pelanggan_id biar tiap pelanggan dihitung terpisah, dan ORDER BY tanggal biar urutannya benar. Hasil ini berguna buat ngukur seberapa sering pelanggan belanja dan deteksi yang jedanya mulai melebar.

Menghitung jarak hari antar order di SQL paling gampang pakai fungsi window LAG.

LAG ngambil tanggal order sebelumnya per pelanggan, lalu kamu kurangin dari tanggal sekarang. Selisihnya itu jarak harinya.

Aku bakal tunjukin query lengkapnya, cara baca hasil, dan gimana pakainya buat deteksi pelanggan yang mulai kabur. Semua pakai contoh data toko_berkah.

Apa itu jarak hari antar order?

Jarak hari antar order adalah jumlah hari antara dua pembelian berturut-turut dari pelanggan yang sama. Kalau seorang pelanggan belanja tanggal 1 lalu belanja lagi tanggal 15, jarak ordernya 14 hari. Angka ini ngukur seberapa sering seseorang beli.

Metrik ini berguna buat tau ritme belanja. Pelanggan yang biasanya belanja tiap 2 minggu tapi tiba-tiba jedanya jadi 2 bulan, itu sinyal dia mulai hilang.

Buat ngitungnya, kamu perlu bandingin tiap order dengan order sebelumnya. Di situlah fungsi window main.

Gimana cara pakai LAG buat hitung jarak order?

Fungsi LAG ngambil nilai dari baris sebelumnya dalam grup yang sama. Buat kasus ini, LAG ngambil tanggal order sebelumnya per pelanggan, lalu kamu kurangin dari tanggal sekarang.

SELECT
    pelanggan_id,
    tanggal_order,
    LAG(tanggal_order) OVER (
        PARTITION BY pelanggan_id
        ORDER BY tanggal_order
    ) AS order_sebelumnya,
    tanggal_order - LAG(tanggal_order) OVER (
        PARTITION BY pelanggan_id
        ORDER BY tanggal_order
    ) AS jarak_hari
FROM orders
ORDER BY pelanggan_id, tanggal_order;

Dua bagian penting di sini. PARTITION BY pelanggan_id bikin tiap pelanggan dihitung terpisah, biar order pelanggan A nggak nyampur sama pelanggan B. ORDER BY tanggal_order mastiin urutannya dari lama ke baru.

Kalau kamu baru kenal window function, konsep ini bakal kepakai terus di analisis data.

Kenapa order pertama hasilnya NULL?

Order pertama tiap pelanggan bakal ngasih NULL di kolom jarak_hari. Ini normal, bukan error. Order pertama nggak punya order sebelumnya buat dibandingin, jadi LAG ngembaliin kosong.

NULL ini malah berguna. Dia nandain order perdana tiap pelanggan secara otomatis. Kamu bisa manfaatin buat ngitung jumlah pelanggan baru per periode.

Tapi kalau kamu mau fokus ke jarak aja, buang baris NULL pakai filter di query pembungkusnya. Aku tunjukin caranya di bagian berikutnya.

Cara hitung rata-rata jarak order per pelanggan

Buat dapat ritme belanja tiap pelanggan, bungkus perhitungan LAG dalam CTE lalu agregasi pakai AVG.

WITH jarak AS (
    SELECT
        pelanggan_id,
        tanggal_order - LAG(tanggal_order) OVER (
            PARTITION BY pelanggan_id ORDER BY tanggal_order
        ) AS jarak_hari
    FROM orders
)
SELECT
    pelanggan_id,
    ROUND(AVG(jarak_hari), 1) AS rata_jarak_hari
FROM jarak
WHERE jarak_hari IS NOT NULL
GROUP BY pelanggan_id
ORDER BY rata_jarak_hari;

Filter WHERE jarak_hari IS NOT NULL penting biar order pertama yang NULL nggak ganggu rata-rata. Hasilnya nunjukin siapa yang belanja sering dan siapa yang jarang.

Teknik CTE plus window function ini juga aku pakai di hitung pertumbuhan week over week. Pola dasarnya mirip.

Contoh kasus: deteksi pelanggan yang mulai hilang

Aku pernah analisis 6.800 order dari toko_berkah buat cari pelanggan yang ritme belanjanya melambat.

Rata-rata jarak order semua pelanggan ada di 23 hari. Tapi ada 140 pelanggan yang order terakhirnya udah lewat 3 kali rata-rata jarak mereka sendiri. Itu sinyal kuat mereka mulai kabur.

Dari 140 pelanggan itu, 48 di antaranya dulunya pelanggan rutin dengan jarak di bawah 15 hari. Kehilangan mereka jauh lebih mahal ketimbang pelanggan sesekali.

Data ini langsung dipakai tim buat kirim promo khusus ke 48 pelanggan prioritas itu. Lebih tepat sasaran ketimbang blast promo ke semua orang.

SegmenJumlah pelangganRata jarak order
Rutin (mulai melambat)48di bawah 15 hari
Sesekali (mulai hilang)9230 hari ke atas

Kesalahan umum saat hitung jarak order

Kesalahan pertama, lupa PARTITION BY pelanggan_id. Tanpa itu, LAG bandingin order antar pelanggan berbeda, dan hasilnya ngaco total.

Kesalahan kedua, lupa ORDER BY tanggal di dalam OVER. Kalau urutannya salah, jarak yang keluar bisa negatif atau nggak masuk akal.

Kesalahan ketiga, di MySQL ngurangin tanggal langsung. Di MySQL kamu perlu DATEDIFF, bukan operator kurang. Di PostgreSQL kurang tanggal langsung ngasih jumlah hari.

Penutup

Menghitung jarak hari antar order di SQL cukup pakai LAG dengan PARTITION BY pelanggan dan ORDER BY tanggal. Order pertama yang NULL itu normal, dan bisa kamu filter kalau nggak butuh.

Metrik ini kuat buat deteksi pelanggan yang mulai hilang, jauh lebih tepat ketimbang nebak-nebak.

Buat referensi lengkap fungsi window, cek dokumentasi window function PostgreSQL. Mau latihan LAG dan fungsi window lain langsung? Coba latihan di NgulikSQL, gratis buat pemula.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Composite Index di SQL: Cara Kerja dan Urutan Kolom
Tutorial SQL
8 Oktober 2026•8 menit baca

Composite Index di SQL: Cara Kerja dan Urutan Kolom

Composite index itu index atas beberapa kolom sekaligus. Urutan kolomnya nentuin query mana yang kebantu, lewat aturan leftmost prefix.

BimaBima
Menghitung Stickiness (DAU/MAU) di SQL
Tutorial SQL
5 Oktober 2026•10 menit baca

Menghitung Stickiness (DAU/MAU) di SQL

Stickiness ngukur seberapa sering user balik lagi. Ini cara hitung DAU, MAU, dan rasio stickiness pakai SQL, plus contoh aplikasi UMKM.

BimaBima
Menghitung DAU dan MAU dengan SQL
Tutorial SQL
3 Oktober 2026•9 menit baca

Menghitung DAU dan MAU dengan SQL

DAU dan MAU dua metrik wajib buat produk digital. Ini cara hitungnya pakai SQL, lengkap query DISTINCT, per bulan, sampai rasio stickiness.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore