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;
全部评论

相关推荐

后端转测开第一人:wlb不好吗 非得卷
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务