Tolong pilih kategori sesuai, jenis posting (diskusi atau bukan) dan sertakan tag/topik yang sesuai seperti komputer, java, php, mysql, dll. Promosi atau posting tidak pada tempatnya akan kami hapus!
- Bagi Anda yang ingin mendaftar, baca link berikut:
http://diskusiweb.com/discussion/50491/how-to-registrasi-diskusiweb-com-baca-ini-terlebih-dahulu
- Cara menyisipkan kode program supaya tampil rapi dan terformat dengan baik di diskusiweb.com: http://www.diskusiweb.com/discussion/50415/cara-menyisipkan-kode-program-di-diskusiweb-com
- Cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

[Ask] Query SQL Server mendekati suatu nilai

saya punya table :
table absen
        NIP           golshift      tgl            masuk                              keluar
101204 non shift 7/16/2013 7:00:00 AM                 4:55:00 PM
101205 non shift 7/16/2013 7:35:52 AM                 7:12:31 PM
101310 shift 3 7/15/2013 7/15/2013 9:44:16 PM 7/16/2013 7:09:45 AM
102530 shift 3 7/15/2013 7/15/2013 10:06:35 PM 7/16/2013 8:13:57 AM

table shift
        shift          masuk                              keluar                               selisih
Shift 1 5:30:00 AM                 1:29:59 PM                 8
Shift 2 1:30:00 PM                 9:29:59 PM                 8
Shift 3 7/16/2013 9:30:00 PM 7/17/2013 5:29:59 AM 8
Non Shift   7:00:00 AM                 3:30:00 PM                 8.30


pertanyaan:
misal pada table absen nip 101205, masuk pada jam = 7:35:52 AM
bagaimana caranya agar nip dgn jam masuk pada waktu tsb, bisa diketahui dia masuk pada shift brapa, pada table shift...?





Tagged:

Comments

  • edited July 2013
    bisa dibikin toleransi 45 menit dari jam masuk shift, jadinya :

    shift1 : 04:45 - 06:15
    non : 06:15 - 07:45
    shift2 : 12:45 - 14:15
    shift3 : 20:45 - 22:15

    itu sudah persis mepet,
    soalnya kalo digedein lagi, bakal overlap antara shift1 dan non

    SELECT ...
    FROM tbl_absen a
    LEFT JOIN tbl_shift s ON CONVERT(VARCHAR(8), a.masuk, 108) BETWEEN CONVERT(VARCHAR(8), DATEADD(minute, -45, s.masuk), 108) AND CONVERT(VARCHAR(8), DATEADD(minute, 45, s.masuk), 108)
  • iya sudah sesuai dgn keinginan saya...

    SELECT shift as shift
    FROM absensi a
    LEFT JOIN tblshift s ON CONVERT(VARCHAR(8), a.masuk, 108) BETWEEN CONVERT(VARCHAR(8), DATEADD(minute, -45, s.masuk), 108) 
    AND CONVERT(VARCHAR(8), DATEADD(minute, 45, s.masuk), 108) 

    output dari query diatas: Non Shift, Non Shift, Shift 3, Shift 3

    misal gini mas;; 
    pada tgl 20/07/2013, NIP=110022, masuk jam=07:30:25, 
    sharusnya data tsb kan ter-insert dalam table absensi, cuman masih NULL untuk field golshift n keluar jdi yang ter-insert hanya TGLNIP dan MASUK.
    nah keinginan saya dari jam MASUK tsb, bisa di ketahui secara otomatis NIP tsb ikut SHIFT brapa dalam table SHIFT. Dan GOLSHIFT bisa masuk otomatis juga sesuai dgn data diatas...
    itu bagaimana mas...?

    kalo misal dperlukan field atau table tambahan juga boleh mas...
    kasih saya pencerahan dulu mas....

    -Thanks-
  • edited July 2013
    http://msdn.microsoft.com/en-us/library/ms189872(v=sql.105).aspx

    INSERT INTO tbl_absen (nip, gol, tgl, masuk, keluar)
    SELECT "110022", s.shift, "2013-07-20", "07:30:25", ""
    FROM tbl_shift s
    WHERE "07:30:25" BETWEEN CONVERT(VARCHAR(8), DATEADD(minute, -45, s.masuk), 108) AND CONVERT(VARCHAR(8), DATEADD(minute, 45, s.masuk), 108)
  • udah mas,,, yg query awal dari smpean tdi, hanya q select shift pada tblshift, 
    trus q buat trigger after insert yg isix ttg update shift pada table absensi...
    alhamdulilah solvedd

    emang MAS BOO, ga ada matinyaa...
    hehehe

    skali lagi makasih mas...

    maaf mas kalo boleh tau smpean kerja di prusahaan apa n nangani apa...?
    jujur q iri bgt dgn kemampuan mas-x...

    hehehe
  • kalo mencari nilai terdekat pakek "ORDER BY ABS(..." aja bang


    abang Yanuar1087, kakak seperguruan hahahaha
  • ok siap dhi.... test dulu
  • edited March 2014
    mana bisa ABS() utk mencari nilai yg mendekati
    ABS() pan utk mencari nilai ABSOLUTE dari suatu nilai, nilai numerik apapun menjadi nilai POSITIF

    problem : mendekati nilai "8"

    value yg tersedia :
    -7
    -9
    5
    6
    10

    kalo ORDER BY ABS(...) ASC
    bisa jadi kaya begini :
    5
    6
    7
    9
    10

    kalo ORDER BY ABS(...) DESC
    10
    9
    7
    6
    5

    lalu ?
    apakah 7 & 9 dianggap mendekati 8 ?
    padahal nilai sebenarnya -7 dan -9 ... jauh banget
  • salam kenal untuk semua.
    gimana cara menentukan jam masuk dan jam keluar dari isi tabel berikut :

    tabel checkinout
    userid  |      checktime
    ------------------------------------------------------
    402      |      2014-10-20 15:55:42.000
    402      |      2014-10-20 23:57:45.000
    402      |      2014-10-21 15:53:02.000
    402      |      2014-10-21 23:58:29.000
    402      |      2014-10-22 15:52:58.000
    402      |      2014-10-22 23:58:40.000
    402      |      2014-10-22 23:59:03.000
    402      |      2014-10-23 15:54:35.000
    402      |      2014-10-23 23:58:30.000
    402      |      2014-10-24 23:25:40.000

    menjadi seperti ini
    tabel combine
    userid  |        masuk                              |                 keluar
    --------------------------------------------------------------------------------------------------------
    402      |      2014-10-20 15:55:42.000      |      2014-10-21 23:58:29.000
    402      |      2014-10-21 15:53:02.000      |      2014-10-22 23:59:03.000
    402      |      2014-10-22 15:52:58.000      |      2014-10-23 23:58:30.000
    402      |      2014-10-23 15:54:35.000      |      2014-10-24 23:25:40.000
    402      |      2014-10-24 23:25:40.000      |      2014-10-25 17:43:31.000

    saya menggunakan query sbb :
    select top 1 c.userid, c.masuk, c.pulang from (select userid,
    (select top 1 checktime from checkinout where userid=139 and
    checktime between '10/20/2014 12:00:00 AM' and '10/21/2014 11:59:59 PM' order by checktime asc) as masuk,
    (select top 1 checktime from checkinout where userid=139 and
    checktime between '10/20/2014 12:00:00 AM' and '10/21/2014 11:59:59 PM' order by checktime desc) as pulang
    from checkinout where userid=139 and checktime between '10/20/2014 12:00:00 AM' and '10/21/2014 11:59:59 PM') as c

    dan query ini bisa diterapkan jika masih dalam satu tanggal, jika sudah menggunakan 3 shift artinya sudah lebih dari range 1 hari, maka tidak efektif, mohon pencerahannya, tks
  • edited November 2014
    [1] bikin tret baru, bukan numpang di tret yg bahasannya beda

    [2] database pake apa ?
    sertakan ddl table yg bisa buat testing
    bantu yg mau bantu jawab, tanpa harus bikin table manual
Sign In or Register to comment.