cari

Rumah  >  Soal Jawab  >  teks badan

Dapatkan pekerja yang tidak mendaftar masuk selama 11 hari berturut-turut

<p>Saya cuba mendapatkan pekerja daripada pangkalan data yang tidak menandakan kehadiran selama 11 hari berturut-turut, Untuk ini saya mempunyai jadual pekerja dan jadual kehadiran tetapi masalah yang saya ada dengan ini ialah tiada rekod dalam jadual kehadiran jadi bagaimana saya boleh mendapatkan</p> <p>Saya mencuba banyak pertanyaan, beberapa daripadanya adalah seperti berikut: </p> <pre class="brush:php;toolbar:false;">SELECT e.name, e.full_name DARI tabPekerja e KIRI SERTAI ( PILIH pekerja, pekerja MIN(tarikh_kehadiran) SEBAGAI tarikh_kehadiran pertama DARI tabKehadiran KUMPULAN MENGIKUT pekerja ) ar ON e.nama = ar.pekerja DI MANA ar.first_attendance_date IS NULL ATAU TIDAK WUJUD ( PILIH 1 DARI tabKehadiran WHERE pekerja = e.nama DAN tarikh_kehadiran >= ar.tarikh_kehadiran_pertama DAN tarikh_kehadiran <DATE_ADD(ar.first_attendance_date, INTERVAL 11 DAY) )</pra> <p>Pertanyaan lain:</p> <pre class="brush:php;toolbar:false;">SELECT e.name, COUNT(a.`attendance_date`), COUNT(e.`name`) daripada tabEmployee e LEFT JOIN tabKehadiran a ON e.name = a.`pekerja` DI MANA a.`pekerja` ADALAH NULL KUMPULAN OLEH e.`name`</pre> <p><br /></p>
P粉103739566P粉103739566584 hari yang lalu555

membalas semua(1)saya akan balas

  • P粉231079976

    P粉2310799762023-08-19 07:58:16

    Menggunakan fungsi LAG() analisis, kita boleh mencuba:

    WITH cte AS (
        SELECT e.name, e.full_name,
               LAG(a.attendance_date) OVER (PARTITION BY a.employee
                                            ORDER BY a.attendance_date) AS lag_attendance_date
        FROM tabAttendance a
        INNER JOIN tabEmployee e ON e.name = a.employee
    )
    
    SELECT DISTINCT name, full_name
    FROM cte
    WHERE DATEDIFF(attendance_date, lag_attendance_date) > 11;
    

    Strategi asas di sini adalah untuk menjana ketinggalan (nilai berturut-turut sebelumnya) tarikh kehadiran dalam CTE. Kami kemudian hanya melaporkan pekerja dengan jurang 11 hari atau lebih lama.

    balas
    0
  • Batalbalas