如何在MySQL中统计指定日期范围内员工去重后的出勤天数?
统计员工去重后的出勤天数
原始数据表
包含date_entry(日期)和emp_id(员工ID)字段,数据如下:
| date_entry | emp_id |
|---|---|
| 2024-02-01 | emp-001 |
| 2024-02-01 | emp-001 |
| 2024-02-01 | emp-002 |
| 2024-02-01 | emp-003 |
| 2024-02-02 | emp-001 |
| 2024-02-02 | emp-002 |
| 2024-02-02 | emp-003 |
| 2024-02-03 | emp-001 |
| 2024-02-03 | emp-002 |
| 2024-02-03 | emp-002 |
| 2024-02-03 | emp-003 |
| 2024-02-04 | emp-002 |
| 2024-02-04 | emp-003 |
需求与预期结果
在2024-02-01至2024-02-04的日期范围内,去除每日的重复出勤记录后,统计每个员工的总出勤天数,预期结果如下:
| emp_id | day_attend |
|---|---|
| emp-001 | 3 |
| emp-002 | 4 |
| emp-003 | 4 |
MySQL 查询语句
方法一:直接使用 COUNT(DISTINCT)
SELECT emp_id, COUNT(DISTINCT date_entry) AS day_attend FROM your_table_name WHERE date_entry BETWEEN '2024-02-01' AND '2024-02-04' GROUP BY emp_id;
方法二:先子查询去重再统计
SELECT emp_id, COUNT(*) AS day_attend FROM ( -- 先筛选出唯一的日期+员工组合,去除每日重复记录 SELECT DISTINCT date_entry, emp_id FROM your_table_name WHERE date_entry BETWEEN '2024-02-01' AND '2024-02-04' ) AS unique_attendance GROUP BY emp_id;
说明
- 两种方法都能实现需求,可任选其一。
- 请将语句中的
your_table_name替换为实际的数据表名称。
内容的提问来源于stack exchange,提问作者Pramono
相关产品推荐
相关产品推荐

