Tugas Mandiri SQL Audit Dasar

Analisis Data Perjalanan Dinas Interaktif dengan SQL

Author

Muhammad Yoga Prabowo

Published

06 Feb, 2026

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;
Note

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

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.

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;
Note

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

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.

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.

Urutkan berdasarkan total biaya akumulasi tertinggi.