Saat mengerjakan
tugas kantor saya mendapati sebuah kasus untuk pengolahan data menggunakan
MYSql, dimana saya harus menampilkan data terakhir dari record yang mempunyai
KODE tertentu yang sama. Dalam artikel ini saya ambil contoh sebuah system
perpustakaan yang mempunyai beberapa judul buku. Selanjutnya kita ditugaskan
untuk menampilkan daftar buku, dan juga menampilkan peminjam terakhir dari buku
tersebut.
lebih jelasnya
seperti contoh di bawah :
Saya mempunyai table
daftar para peminjam buku di perpustakaan sebagai berikut .
Nama table nya
adalah “table_peminjam” yang berisi record – record seperti di bawah
Id
|
Kode_Buku
|
peminjam
|
Tanggal_pinjam
|
Tanggal_kembali
|
1
|
A-1
|
Agus Susanto
|
2015-02-22
|
2015-02-26
|
2
|
A-2
|
Azis
|
2015-02-22
|
2015-02-27
|
3
|
A-1
|
M. Ghozali
|
2015-02-28
|
2015-03-07
|
4
|
A-3
|
Edi H
|
2015-02-29
|
2015-03-07
|
5
|
A-3
|
Sofyan
|
2015-03-09
|
2015-03-20
|
6
|
A-2
|
Agus Susanto
|
2015-03-11
|
2015-03-15
|
Dari data
tersebut saya ingin menampilkan nama peminjam yang terakhir meminjam buku, contohnya yang meminjam buku “A-1” dari
data tersebut ada 2 orang, yaitu “Agus Susanto” dan “M. Ghozali”. Yang pertama
meminjam pada tanggal “2015-02-22” bernama
“Agus Susanto” yang dikembalikan pada tanggal “2015-02-26”. Kemudian pada tanggal “2015-02-28”, buku
tersebut dipinjam oleh “M. Ghozali”. Jadi peminjam terakhir dari buku “A-1”
adalah “M.Ghozali”. sehingga nanti hasil
dari Query akan menampilan kode_buku “A-1”, “M. Ghozali” sebagai peminjam, “2015-02-28”
tanggal_kembali dan “2015-03-07” sebagai
tanggal_kembali, sehingga nanti akan menampilkan table hasil seperti berikut :
Id
|
Kode_Buku
|
peminjam
|
Tanggal_pinjam
|
Tanggal_kembali
|
3
|
A-1
|
M. Ghozali
|
2015-02-28
|
2015-03-07
|
5
|
A-3
|
Sofyan
|
2015-03-09
|
2015-03-20
|
6
|
A-2
|
Agus Susanto
|
2015-03-11
|
2015-03-15
|
Dari table hasil
di atas ditampilkan semua data berdasarkan kode_buku, kemudian dari tiap buku tersebut akan ditampilkan nama
peminjam terakhir, tanggal pinjam dan juga tanggal kembali.
Sekarang kita
mencoba melakukan Query SQL nya:
ada 2 cara Query
yang pernah saya coba untuk menampilkan hasil seperti table hasil di atas.
Pertama dengan
menggunakan cara Query bersarang dan INNER JOIN :
“SELECT * FROM
table_peminjam AS a
INNER JOIN
(SELECT MAX(id) AS id FROM table_peminjam GROUP BY kode_buku) b
ON a.id = b.id”
Penjelasan :
Disitu ada 2
QUERY, yang pertama “SELECT * FROM table_peminjam, Query tersebut menampilkan
semua isi table_peminjam.
Query ke-dua “SELECT MAX(id) AS id FROM table_peminjam GROUP BY kode_buku”, query tersebut akan
menghasilkan id terbesar dari tiap-tiap kode_buku, jelasnya hasil Query seperti
berikut :
Id
|
3
|
5
|
6
|
Dari kedua Query
tersebut selanjutnya kita lakukan INNER JOIN, seperti pada Query di atas,
sehingga nanti hasilnya akan menampilkan data buku dengan peminjam terakhir.
Cara 2 :
“SELECT * from
table_peminjam
WHERE id IN
(
SELECT MAX(id) AS id FROM table_peminjam GROUP BY kode_buku
)
Cara yang kedua
ini hampir sama dengan cara yang pertama yaitu pertama melakukan Query dulu
terhadap semua isi table_peminjam, kemudian isi table tersebut di filter
berdasarkan hasil Query dari SELECT MAX(id)
AS id FROM table_peminjam GROUP
BY kode_buku. Sehingga data yang ditampilkan hanya data table_peminjam yang id
nya ada di hasil Query MAX(id).
Demikian trik
dari saya semoga membantu
Mantap berguna sekali, semoga berkah dunia-akhirat sohib.
ReplyDeleteaamiin.. terima kasih bos semoga tanahnya cepat laku..
ReplyDeleteBisa diberikan contoh detail kasusnya mas?
ReplyDeleteterimakasi mas..
ReplyDeletepencerahannya sudah memecahkan masalahku, hehe
Gimana caranya buat seperti ini:
ReplyDeleteDatabasenya
a b c d
h i j k
h i l m
Jadi seperti ini:
a b c d
h i j k
l m
Mohon bantuannya kang
terimakasih
email: abuh709@gmail.com
Mantap gan..
ReplyDelete