SELECT
    emp.employee_number,   – 员工工号
    emp.name,              – 员工姓名
    COALESCE(tran_dep.value, dep.name, '') AS department_name,
    COALESCE(tran_position.value, position.name, '') AS position_name,
    detail.attendance_date,
    –     如当天排班,且为不为休息,则为 排班结束(日模型结束)时间;如为休息,或者未排班 则为第一次打卡时间; 注意:主要时间不要日期,如 09:00
    CASE WHEN detail.day_calendar_id IS NOT NULL OR daily_model.code='DM00' OR daily_model.code='DM52'
    THEN COALESCE(to_char(detail.clock_in_time,'hh24:mi'), '')
    ELSE daily_model.work_off_start
    END AS start_time,   – 开始时间
    –     如当天排班,且为不为休息,则为  排班结束(日模型结束) 后最后一次打卡时间;如为休息,或者未排班 则为最后一次打卡时间; 如只有1次打卡则为空;注意:主要时间不要日期,如 22:00
    COALESCE(to_char(detail.clock_out_time,'hh24:mi'), '') AS end_time,    – 结束时间
    CASE WHEN detail.day_calendar_id IS NOT NULL OR daily_model.code='DM00' OR daily_model.code='DM52'
    THEN cast(round(cast(date_part('epoch', detail.clock_out_time::time - detail.clock_in_time::time)/60/60 as numeric ),1)as varchar)
    ELSE cast(round(cast(date_part('epoch', detail.clock_out_time::time - daily_model.work_off_start::time)/60/60 as numeric ),1)as varchar)
    END AS real_hour,   – 实际时长
    null AS overtime_reason,   – 加班原因	空,不写逻辑
    (detail.clock_in_place || ',' || detail.clock_out_place) AS app_place, – APP显示位置	开始时间的打卡位置 及 结束时间的打卡位置,中间用“逗号”分隔
    COALESCE(tran_area.value, area.name, '') AS area_name,  – 考勤区域	开始时间的考勤区域 及 结束时间的考勤区域,中间用“逗号”分隔
    (detail.clock_in_dest_address || ',' || detail.clock_out_dest_address) AS dest_address  – 考勤点	开始时间的考勤点 及 结束时间的考勤点,中间用“逗号”分隔
FROM hr_attendance_details detail
LEFT JOIN hr_employee emp ON emp.id=detail.employee_id
LEFT JOIN emp_job ON emp.job_info_id=emp_job.id
– 部门
LEFT JOIN hr_department AS dep ON emp_job.department_id = dep.eroad_index_id AND
          dep.eroad_index_id IS NOT NULL AND
          dep.eroad_start_date <= detail.attendance_date AND
          (dep.eroad_end_date >= detail.attendance_date OR dep.eroad_end_date IS NULL) AND
          dep.active = TRUE
LEFT JOIN ir_translation AS tran_dep on tran_dep.res_id=dep.id and tran_dep.lang='zh_CN' and tran_dep.name='hr.department,name'
– 岗位
LEFT JOIN hr_position AS position ON emp_job.position_id = position.eroad_index_id AND
          position.eroad_index_id IS NOT NULL AND
          position.eroad_start_date <= detail.attendance_date AND
          (position.eroad_end_date >= detail.attendance_date OR position.eroad_end_date IS NULL) AND
          position.active = TRUE
LEFT JOIN ir_translation AS tran_position on tran_position.res_id=position.id and tran_position.lang='zh_CN' and tran_position.name='hr.position,name'
– 排班
LEFT JOIN day_calendar ON day_calendar.id=detail.day_calendar_id
– 排班日模型
LEFT JOIN daily_model ON daily_model.id = day_calendar.daily_model_id
– 考勤区域
LEFT JOIN hr_attendance_area area ON detail.attendance_area_id=area.id
LEFT JOIN ir_translation AS tran_area on tran_area.res_id=area.id and tran_area.lang='zh_CN' and tran_area.name='hr.attendance.area,name'