11/17/15

TRIK SQL : Menfilter data untuk Menampilkan Data terbaru



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




6 comments:

  1. Mantap berguna sekali, semoga berkah dunia-akhirat sohib.

    ReplyDelete
  2. aamiin.. terima kasih bos semoga tanahnya cepat laku..

    ReplyDelete
  3. Bisa diberikan contoh detail kasusnya mas?

    ReplyDelete
  4. terimakasi mas..
    pencerahannya sudah memecahkan masalahku, hehe

    ReplyDelete
  5. Gimana caranya buat seperti ini:
    Databasenya
    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

    ReplyDelete