2

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,
           CAST(card_date || ' ' || card_time AS timestamp) AS card_timestamp  -- 构建完整的timestamp
    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,
           p.card_timestamp,
           LAG(p.card_timestamp) OVER (PARTITION BY e.emp_no ORDER BY p.card_timestamp) AS prev_card_timestamp
    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_card_timestamp, 
       EXTRACT(EPOCH FROM (card_timestamp - prev_card_timestamp)) / 60 AS time_diff_minutes,
       location_id, 
       in_out
FROM ptms_combined
WHERE prev_card_timestamp IS NOT NULL
  AND EXTRACT(EPOCH FROM (card_timestamp - prev_card_timestamp)) / 60 > 30
ORDER BY emp_no, card_date, F1_SJ;
全部评论
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, TO_TIMESTAMP(card_date || ' ' || card_time, 'YYYY/MM/DD HH:MI:SS AM') AS card_timestamp -- 使用TO_TIMESTAMP进行转换 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, p.card_timestamp, LAG(p.card_timestamp) OVER (PARTITION BY e.emp_no ORDER BY p.card_timestamp) AS prev_card_timestamp 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_card_timestamp, EXTRACT(EPOCH FROM (card_timestamp - prev_card_timestamp)) / 60 AS time_diff_minutes, location_id, in_out FROM ptms_combined WHERE prev_card_timestamp IS NOT NULL AND EXTRACT(EPOCH FROM (card_timestamp - prev_card_timestamp)) / 60 > 30 ORDER BY emp_no, card_date, F1_SJ;
点赞 回复 分享
发布于 2024-07-22 16:47 江苏

相关推荐

2025-12-25 16:26
已编辑
河北科技学院 Java
勇敢的牛油不服输:2800-300那不等于2500一个月吗兄弟们
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
2025-12-19 10:45
秋招路在何方:少了啊,我身边都是350000k*18,发三体货币
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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