Oracle 获取当月出勤天数
时间: 2023-12-21 10:21:38 浏览: 131
要获取当月的出勤天数,可以使用如下的SQL查询语句:
```
SELECT COUNT(c.calendar_date) AS 出勤天数
FROM calendar c
CROSS JOIN employee e
LEFT JOIN attendance a ON a.check_date = c.calendar_date AND a.emp_id = e.emp_id
WHERE c.calendar_year = 2021
AND c.calendar_month = 1
AND c.is_work_day = 'Y'
AND (a.id IS NULL OR a.clock_in IS NULL OR a.clock_out IS NULL OR EXTRACT(HOUR FROM a.clock_in) >= 9 OR EXTRACT(HOUR FROM a.clock_out) < 18);
```
这个查询语句中,首先使用交叉连接(CROSS JOIN)将日历表和员工表进行连接,得到一个笛卡尔积,即所有员工每日的打卡记录。然后使用左连接(LEFT JOIN)将出勤表与这个笛卡尔积连接,以保留所有的日历日期。接着通过条件筛选出符合要求的记录,即缺勤、迟到或早退的情况。最后使用COUNT函数统计出勤天数,即出现在结果集中的日历日期的数量。<span class="em">1</span><span class="em">2</span>
#### 引用[.reference_title]
- *1* *2* [SQL案例学习-员工考勤记录](https://blog.csdn.net/liangmengbk/article/details/124154670)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文