Check Duplicate
Check Duplicate Multiple Table
1. Bagian "WITH RankedTempLeads AS (...)"
Bagian ini membuat temporary table bernama RankedTempLeads
yang berisi data dari tabel temp_leads
, tetapi hanya data tertentu yang memenuhi syarat. Berikut penjelasannya:
a. Kolom Tambahan
ROW_NUMBER() OVER (PARTITION BY t.phone ORDER BY t.timestamp ASC) AS row_num
Menambahkan kolom bernamarow_num
, yang memberikan nomor urut untuk setiap group berdasarkan nilait.phone
.Pengelompokan dilakukan menggunakan
PARTITION BY t.phone
(artinya data dikelompokkan berdasarkan nomor telepon).Nomor urut ditentukan berdasarkan urutan waktu (
t.timestamp ASC
), sehingga data dengan waktu yang paling awal mendapat nomor 1.
b. Syarat "WHERE"
WHERE NOT EXISTS (...)
: Mengecek apakah datat.phone
daritemp_leads
tidak ada di dua tabel lain, yaitu:Tabel
leads
(kolomphone
).Tabel
family
(kolomfamily_phone
).
Jika
t.phone
ditemukan di salah satu tabel tersebut, maka data tersebut akan diabaikan.AND t.phone IS NOT NULL
: Memastikan nomor telepon (t.phone
) tidak kosong/null.
Hasilnya adalah temporary table RankedTempLeads
yang hanya berisi data nomor telepon yang:
Tidak ada di tabel
leads
danfamily
.Nomor teleponnya tidak kosong.
2. Bagian "SELECT * FROM RankedTempLeads WHERE row_num = 1"
Bagian ini memilih data dari temporary table RankedTempLeads
, tetapi hanya baris dengan row_num = 1
.
Artinya, hanya data dengan waktu terawal (
timestamp
paling kecil) untuk setiap nomor telepon yang akan diambil.
3. Bagian "ORDER BY phone ASC"
Hasil akhir diurutkan berdasarkan nomor telepon (phone
) dalam urutan naik (ascending order).
Kesimpulan Fungsi Query
Query ini digunakan untuk:
Mengambil data nomor telepon dari tabel
temp_leads
yang tidak ada di tabelleads
danfamily
.Memastikan hanya nomor telepon yang tidak kosong yang diproses.
Dari setiap nomor telepon, hanya memilih data dengan waktu terawal (
timestamp
paling kecil).Menampilkan hasil dengan urutan nomor telepon secara naik (ASC).
Hasil akhir adalah daftar unik nomor telepon dari temp_leads
yang belum ada di tabel leads
maupun family
, dengan satu baris data per nomor telepon (berdasarkan waktu terawal).
Check Duplicate Single Table
1. Bagian WITH DuplicatePhones AS (...)
WITH DuplicatePhones AS (...)
Bagian ini membuat temporary table bernama DuplicatePhones
yang berisi daftar nomor telepon (phone
) dari tabel public.leads
yang terdapat lebih dari satu kali (duplikat). Berikut rincian logikanya:
a. SELECT phone
Hanya mengambil kolom
phone
dari tabelpublic.leads
.
b. GROUP BY phone
Mengelompokkan data berdasarkan kolom
phone
, sehingga setiap nomor telepon dikelompokkan menjadi satu grup.
c. HAVING COUNT(phone) > 1
Memfilter grup yang memiliki jumlah (COUNT) lebih dari 1, yaitu nomor telepon yang muncul lebih dari satu kali (duplikat).
Hasil dari bagian ini adalah daftar nomor telepon yang memiliki duplikat di tabel public.leads
.
2. Bagian SELECT l.*
SELECT l.*
Bagian ini digunakan untuk mengambil semua kolom dari tabel public.leads
, tetapi hanya untuk baris yang nomornya termasuk dalam daftar DuplicatePhones
. Berikut rincian logikanya:
a. INNER JOIN DuplicatePhones dp
Melakukan inner join antara tabel
public.leads
(aliasl
) dengan temporary tableDuplicatePhones
(aliasdp
).Kondisi join:
ON l.phone = dp.phone
, artinya hanya data di tabelpublic.leads
yang nomor teleponnya cocok dengan daftar nomor diDuplicatePhones
akan diambil.
b. WHERE leads_qualification IN ('Inbound', 'Leads') (dalam komentar)
Baris ini saat ini dinonaktifkan (commented out), tetapi jika diaktifkan, akan memfilter data lebih lanjut untuk hanya menampilkan baris di mana kolom
leads_qualification
bernilai'Inbound'
atau'Leads'
.
c. ORDER BY phone, "timestamp" ASC
Mengurutkan hasil akhir berdasarkan:
Nomor telepon (
phone
) dalam urutan naik (ascending).Waktu (
timestamp
) dalam urutan naik.
Kesimpulan Fungsi Query
Query ini digunakan untuk:
Mendeteksi nomor telepon yang memiliki duplikat di tabel
public.leads
(nomor telepon yang muncul lebih dari sekali).Mengambil semua data dari tabel
public.leads
untuk nomor-nomor telepon tersebut.Mengurutkan hasil berdasarkan nomor telepon dan waktu (
timestamp
).
Hasil akhirnya adalah daftar lengkap baris dari tabel public.leads
yang memiliki duplikat nomor telepon, diurutkan berdasarkan nomor telepon dan waktu secara naik.
Jika bagian WHERE leads_qualification IN ('Inbound', 'Leads')
diaktifkan, maka hanya data dengan leads_qualification
tertentu yang akan ditampilkan.
Last updated