Tugas Mandiri SQL Audit Dasar
Analisis Data Perjalanan Dinas Interaktif dengan SQL
Kasus A: Durasi Perjalanan Dinas yang Lama
Perjalanan dinas standar biasanya memakan waktu 3 hingga 5 hari kerja. Namun, laporan awal menunjukkan adanya beberapa penugasan yang durasinya jauh melampaui batas kewajaran. Sebagai auditor, Anda diminta untuk menghitung durasi hari setiap penugasan guna mendeteksi potensi inefisiensi anggaran atau penyalahgunaan waktu dinas. Kolom-kolom dari tabel perjalanan_dinas yang wajib muncul dalam hasil query Anda adalah no_st, name_pegawai, kota_tujuan, tgl_berangkat, tgl_kembali, dan lama_hari.
Lengkapi query ini untuk menemukan perjalanan dinas yang lebih lama dari kewajaran.
SELECT
...,
...,
...,
...,
...,
CAST(julianday(tgl_kembali) - julianday(tgl_berangkat) AS INTEGER) + 1 AS lama_hari
FROM ...
ORDER BY ... DESC;Jika Anda telah melengkapi kode ini dengan benar, hasil query akan menampilkan data perjalanan dinas yang diurutkan berdasarkan durasi/lama hari dari yang paling panjang. Contoh:
| no_st | nama_pegawai | kota_tujuan | tgl_berangkat | tgl_kembali | lama_hari |
|---|---|---|---|---|---|
| ST-024 | Joko Susilo | Labuan Bajo | 2024-09-20 | 2024-09-25 | 6 |
| ST-044 | Jukida Sitohang | Raja Ampat | 2024-09-22 | 2024-09-26 | 5 |
| … | … | … | … | … | … |
SELECT
Perintah CAST(julianday(tgl_kembali) - julianday(tgl_berangkat) AS INTEGER) + 1 AS lama_hari telah disediakan untuk menghitung lama hari perjalanan. Masukkan nama-nama kolom lain di atasnya.
ORDER_BY
Urutkan berdasarkan lama hari perjalanan terpanjang.
Kasus B: Memecah Transaksi Perjalanan Dinas (Splitting)
Auditor mencurigai adanya praktik “splitting”, di mana seorang pegawai melakukan beberapa perjalanan dinas dalam waktu yang berdekatan untuk memecah nominal transaksi agar tidak terlihat besar. Anda diminta untuk mengidentifikasi pegawai yang memiliki akumulasi biaya perjalanan sangat tinggi dalam satu bulan yang sama. Kolom-kolom yang wajib muncul dalam hasil query Anda adalah nama_pegawai, bulan, jumlah_perjalanan, dan total_biaya_akumulasi.
Lengkapi query ini untuk menemukan pegawai yang melakukan 5 atau lebih perjalanan dinas dalam 1 bulan dan total biayanya lebih dari 20 juta.
SELECT
nama_pegawai,
strftime('%m', tgl_berangkat) AS bulan,
... AS jumlah_perjalanan,
... AS ...
FROM perjalanan_dinas
GROUP BY ..., ...
HAVING ... AND ...
ORDER BY ... DESC;Jika Anda telah melengkapi kode ini dengan benar, hasil query akan menampilkan pegawai dengan jumlah surat tugas lebih dari 1 dan total biaya akumulasi lebih dari 20 juta dalam satu bulan yang sama. Contoh:
| nama_pegawai | bulan | jumlah_perjalanan | total_biaya_akumulasi |
|---|---|---|---|
| Indra Warmindo | 10 | 5 | 29.100.000 |
SELECT
Perintah strftime('%m', tgl_berangkat) AS bulan telah disediakan untuk mengambil data bulan dari tgl_berangkat. Anda tinggal menghitung jumlah_perjalanan dan total_biaya_akumulasi menggunakan fungsi agregat SQL yang sesuai.
GROUP BY dan HAVING
Kelompokkan agar data per orang (nama_pegawai) tidak campur antar bulan dengan GROUP_BY, kemudian filter jumlah surat tugas lebih dari 1 dan total biaya akumulasi lebih dari 20 juta dengan HAVING.
ORDER_BY
Urutkan berdasarkan total biaya akumulasi tertinggi.