Dapatkan pekerja yang tidak mendaftar masuk selama 11 hari berturut-turut
P粉103739566
P粉103739566 2023-08-18 09:31:19
0
1
484
<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粉103739566
P粉103739566

membalas semua(1)
P粉231079976

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan