Menemukan Kesenjangan Urutan dalam Tabel di Oracle
MasalahAnda ingin menemukan semua celah dalam urutan angka atau tanggal dan waktu dalam data Anda. Kesenjangan bisa
dalam tanggal yang direkam untuk tindakan tertentu, atau dalam beberapa data lain dengan sifat berurutan secara logis.
Solusi
Fungsi LAG dan LEAD OLAP Oracle memungkinkan Anda membandingkan baris hasil saat ini dengan baris sebelumnya.
Format umum LAG terlihat seperti ini
Lag (kolom atau ekspresi, offset baris sebelumnya, default untuk baris pertama)
Kolom atau ekspresi adalah nilai yang akan dibandingkan dengan nilai tertinggal (sebelumnya). Offset baris
sebelumnya menunjukkan berapa banyak baris sebelum baris saat ini yang harus dilawan oleh LAG. Kami telah menggunakan '1' di
daftar berikut untuk mengartikan baris satu sebelum baris saat ini. Default untuk LAG menunjukkan nilai
apa yang digunakan sebagai preseden untuk baris pertama, karena tidak ada baris nol dalam tabel atau hasil. Kami menginstruksikan Oracle
untuk menggunakan 0 sebagai nilai jangkar default, untuk menangani kasus di mana kami mencari hari sebelum
bulan pertama.
Pendekatan dengan kueri alias dapat digunakan di hampir semua situasi di mana subkueri digunakan, untuk
merelokasi detail subkueri sebelum kueri utama. Ini membantu keterbacaan dan pemfaktoran ulang kode jika
diperlukan di kemudian hari.
Resep ini mencari celah dalam urutan hari saat pesanan dibuat untuk bulan
November 1999:
dengan hari penjualan sebagai
(pilih ekstrak(hari dari tanggal_pesanan) penjualan_berikutnya,
lag(ekstrak(hari dari tanggal_pesanan),1,0)
lebih (pesan berdasarkan ekstrak(hari dari tanggal_pesanan)) prev_sale
dari oe.orders
di mana tanggal_pesanan antara '01-NOV-1999' dan '30-NOV-1999')
pilih prev_sale, next_sale
dari hari penjualan
di mana next_sale - prev_sale> 1
pesan berdasarkan prev_sale;
Permintaan kami menunjukkan kesenjangan, dalam hitungan hari, antara penjualan untuk bulan November 1999.
PREV_SALE BERIKUTNYA_SALE
---------- ----------
1 10
10 14
15 19
20 22
Hasilnya menunjukkan bahwa setelah pemesanan tercatat pada awal bulan, tidak ada pemesanan berikutnya
tercatat hingga tanggal 10. Kemudian jeda empat hari diikuti ke tanggal 14, dan seterusnya. Manajer penjualan yang cerdik
mungkin akan menggunakan data ini untuk menanyakan apa yang dilakukan tim penjualan pada hari-hari jeda tersebut, dan mengapa tidak ada pesanan
masuk!