Hallo! Selamat Datang di Marketplace produk digital, Freelancer terbaik di indonesia (67564 Members, 784 Products, 5294 Topic, 12958 Comments)

Membuat Query mysql untuk menghitung selisih waktu

Dibuat
Login Terakhir 7 Bulan lalu,
Telah Dilihat 22243 Kali
pagandeng salapang Mengatakan : Sultan Account
  1. salam hormat, mau tanya nih ttg query selisih waktu.
  2. saya punya tabel spt pd gambar terlampir.
  3.  
  4. ingin dibuat query untuk rekap absen perorang perhari, dengan menampilkan jam masuk dan pulangnya.
  5.  
  6. sy sdh buat query spt ini:
  7.  
  8. SELECT
  9. idabsen,
  10. newsid,
  11. jamjam,
  12. DATE_FORMAT(jamjam, '%d-%b-%y') AS tanggal,
  13. DATE_FORMAT(MIN(jamjam), '%H:%i') AS masuk,
  14. CASE WHEN MAX(jamjam)<>MIN(jamjam)
  15. THEN DATE_FORMAT(MAX(skpabsen.jamjam), '%H:%i') END AS keluar
  16. FROM
  17. skpabsen
  18. GROUP BY newsid, DATE(jamjam)
  19.  
  20. dengan hasil output:
  21.  
  22. idabsen newsid jamjam tanggal masuk keluar
  23. 1299 593 2018-1-2 07:39:30 02-Jan-18 07:39 16:21
  24. 1368 593 2018-1-3 07:26:22 03-Jan-18 07:26 16:50
  25. 1445 593 2018-1-4 07:25:13 04-Jan-18 07:25 16:57
  26. 1535 593 2018-1-5 07:28:08 05-Jan-18 07:28 19:06
  27. 1706 593 2018-1-9 07:30:27 09-Jan-18 07:30 16:07
  28.  
  29. yg ingin saya tanyakan, bgmn buat query nya supaya muncul kolom tambahan
  30. sebagai tanda bahwa yg masuk lewat 07:30 akan tampil pesan "terlambat".
  31. demikian pula kolom baru sebagai pesaan "cepat pulang" bagi yg pulang sebelum jam 16:00.
  32.  
  33. mohon pencerahannya teman-teman.
  34.  
  35. makasih
  36.  
Ada 1 File Kiriman :
1. absen2.JPG (33 KB)

Ada 3 Jawaban

PHPMU.COM Support
commented on 23 Jan 2018 17:57:44
  1. Assalam, bisa dengan mengubah querynya menjadi seperti berikut :
  2. SELECT a.*,
  3. TIME_TO_SEC(timediff('07:30:00',a.masuk))/60 as telat_masuk, TIME_TO_SEC(timediff('16:00:00',a.keluar))/60 as cepat_pulang,
  4. IF(TIME_TO_SEC(timediff('07:30:00',a.masuk))/60<0,'Telat','Tepat Waktu') as status_masuk,
  5. IF(TIME_TO_SEC(timediff('16:00:00',a.keluar))/60<0,'Cepat','Tepat Waktu') as status_pulang
  6. FROM (SELECT
  7. idabsen,
  8. newsid,
  9. jamjam,
  10. DATE_FORMAT(jamjam, '%d-%b-%y') AS tanggal,
  11. DATE_FORMAT(MIN(jamjam), '%H:%i') AS masuk,
  12. CASE WHEN MAX(jamjam)<>MIN(jamjam)
  13. THEN DATE_FORMAT(MAX(skpabsen.jamjam), '%H:%i') END AS keluar
  14. FROM
  15. skpabsen
  16. GROUP BY newsid, DATE(jamjam)) as a
  17.  
  18. Jadi nanti akan ada tambahan 4 filed baru yaitu :
  19. 1. telat_masuk : Berapa menit lama telatnya dari waktu yang sudah ditentukan..
  20. 2. cepat_pulang : Berapa menit dia cepat pulangnya dari waktu yang ditentukan
  21. 3. status_masuk : isinya nanti "Telat" atau "Tepat Waktu"
  22. 4. status_pulang : isinya nanti "Cepat" atau "Tepat waktu"
  23.  
  24. Semoga bermanfaat,.. :)
  25.  
  26.  
pagandeng salapang
commented on 23 Jan 2018 22:40:59
  1. super skali codingx.
  2. makasih
pagandeng salapang
commented on 27 Jan 2018 11:23:14
  1. Maaf mas, bertanya lagi nih mas, kelanjutan dari query di atas.
  2.  
  3. sdh hasilkan output spt ini:
  4.  
  5. idabsen newsid jamjam tanggal masuk keluar statusmsk statusplg
  6. 1299 593 2018-1-2 07:39:30 02-Jan-18 07:39 16:21 telat tepat waktu
  7. 1368 593 2018-1-3 07:26:22 03-Jan-18 07:26 16:50 tepat waktu tepat waktu
  8. 1445 560 2018-1-2 07:25:13 02-Jan-18 07:25 16:57 tepat waktu tepat waktu
  9. 1535 560 2018-1-3 07:28:08 03-Jan-18 07:28 19:06 tepat waktu tepat waktu
  10. 1706 561 2018-1-3 07:30:27 03-Jan-18 07:31 15:07 telat cepat
  11.  
  12. kemudian ada tabel pegawai:
  13.  
  14. newsid nama
  15. 593 budi
  16. 560 iwan
  17. 561 wati
  18.  
  19. saya sdh buatkan query utk hitung count rekap spt ini:
  20.  
  21. SELECT
  22. newsid, nama,
  23. count(IF(statusmsk='telat',statusmsk,NULL)) as jmltelatmsk,
  24. count(IF(statusklr='cepat',statusklr,NULL)) as jmlcepat
  25. FROM
  26. query_mas_diatas
  27. GROUP BY newsid
  28.  
  29. outputnya hanya meng-count pegawai yg datang saja.
  30. kira2 bgmn query nya supaya muncul juga jumlah mangkir dari pegawai.
  31. misal pada contoh tabel diatas, pegawai id 561 (wati) mangkir pd tanggal 2.
  32.  
  33. sehingga outputnya spt kolom:
  34. newsid nama jmltelatmsk jmlcepat mangkir
  35. 593 budi 1 0 0
  36. 560 iwan 0 0 0
  37. 561 wati 1 1 1
  38.  
  39. makasih sebelumnya
  40.  
Maaf, Untuk Memberikan Komentar Anda Harus Login !!!