WITH emp_info AS (
SELECT emp_no, emp_name_ch, emp_dept, class_id, class_no
FROM AUSZDLMS.i_facs_employee
WHERE emp_dept LIKE 'MS01%'
),
ptms_info AS (
SELECT emp_no,
card_date,
card_time,
card_time AS F1_SJ,
import_date,
location_id,
in_out
FROM AUSZDLMS.h_ata_record
WHERE card_date >= current_date - 1
),
ptms_combined AS (
SELECT e.emp_no,
e.emp_name_ch,
e.emp_dept,
e.class_id,
e.class_no,
p.card_date,
p.card_time,
p.F1_SJ,
p.location_id,
p.in_out,
LAG(p.F1_SJ) OVER (PARTITION BY e.emp_no, p.card_date ORDER BY p.F1_SJ) AS prev_F1_SJ
FROM emp_info e
LEFT JOIN ptms_info p ON e.emp_no = p.emp_no
WHERE p.card_time IS NOT NULL
AND p.location_id NOT LIKE '%F1-1F%'
AND p.location_id NOT LIKE '%F1-2F%'
AND p.location_id NOT LIKE '%F1-3F%'
AND p.location_id NOT LIKE '%F1-4F%'
AND p.location_id NOT LIKE '%F2-3F%'
AND p.location_id NOT LIKE '%F2-4F%'
)
SELECT emp_no,
emp_name_ch,
emp_dept,
class_id,
class_no,
card_date,
card_time,
F1_SJ,
prev_F1_SJ,
EXTRACT(EPOCH FROM (F1_SJ - prev_F1_SJ)) / 60 AS time_diff_minutes,
location_id,
in_out
FROM ptms_combined
WHERE prev_F1_SJ IS NOT NULL
AND EXTRACT(EPOCH FROM (F1_SJ - prev_F1_SJ)) / 60 > 30
ORDER BY emp_no, card_date, F1_SJ;
SELECT emp_no, emp_name_ch, emp_dept, class_id, class_no
FROM AUSZDLMS.i_facs_employee
WHERE emp_dept LIKE 'MS01%'
),
ptms_info AS (
SELECT emp_no,
card_date,
card_time,
card_time AS F1_SJ,
import_date,
location_id,
in_out
FROM AUSZDLMS.h_ata_record
WHERE card_date >= current_date - 1
),
ptms_combined AS (
SELECT e.emp_no,
e.emp_name_ch,
e.emp_dept,
e.class_id,
e.class_no,
p.card_date,
p.card_time,
p.F1_SJ,
p.location_id,
p.in_out,
LAG(p.F1_SJ) OVER (PARTITION BY e.emp_no, p.card_date ORDER BY p.F1_SJ) AS prev_F1_SJ
FROM emp_info e
LEFT JOIN ptms_info p ON e.emp_no = p.emp_no
WHERE p.card_time IS NOT NULL
AND p.location_id NOT LIKE '%F1-1F%'
AND p.location_id NOT LIKE '%F1-2F%'
AND p.location_id NOT LIKE '%F1-3F%'
AND p.location_id NOT LIKE '%F1-4F%'
AND p.location_id NOT LIKE '%F2-3F%'
AND p.location_id NOT LIKE '%F2-4F%'
)
SELECT emp_no,
emp_name_ch,
emp_dept,
class_id,
class_no,
card_date,
card_time,
F1_SJ,
prev_F1_SJ,
EXTRACT(EPOCH FROM (F1_SJ - prev_F1_SJ)) / 60 AS time_diff_minutes,
location_id,
in_out
FROM ptms_combined
WHERE prev_F1_SJ IS NOT NULL
AND EXTRACT(EPOCH FROM (F1_SJ - prev_F1_SJ)) / 60 > 30
ORDER BY emp_no, card_date, F1_SJ;
全部评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享