php - 如何计算每月的“星期日”来计算缺勤员工
问题描述
我在计算一个月内的员工缺勤率时遇到问题。在我的查询中,它仍然计算本月“星期日”的日期,这不应该计算在内。
这是使用的示例数据库:
emp0003 表
尼克 | 姓名 |
---|---|
01190301 | 苏珊 |
dvc0004 表
尼克 | 注册 |
---|---|
01190301 | 2021-02-08 07:20:39 |
01190301 | 2021-02-06 14:37:08 |
01190301 | 2021-02-06 07:57:42 |
01190301 | 2021-02-05 17:29:00 |
01190301 | 2021-02-05 08:09:54 |
01190301 | 2021-02-04 19:21:38 |
01190301 | 2021-02-04 08:12:44 |
01190301 | 2021-02-03 17:44:02 |
01190301 | 2021-02-03 08:06:27 |
01190301 | 2021-02-02 18:52:15 |
01190301 | 2021-02-02 08:02:32 |
01190301 | 2021-02-01 20:07:13 |
01190301 | 2021-02-01 07:55:49 |
01190301 | 2021-01-30 16:20:56 |
01190301 | 2021-01-30 07:59:45 |
这是我的查询 sql:
SELECT
emp0003.NIK,
emp0003.`Name`,
DAY(CURRENT_DATE) - COUNT(
DISTINCT
DATE(LEFT((`dvc0004`.`Enroll`), 10)),
(CASE
WHEN LEFT(( `dvc0004`.`Enroll`), 10)
AND MONTH(LEFT((`dvc0004`.`Enroll`), 10)) = MONTH(CURRENT_DATE())
AND YEAR(LEFT((`dvc0004`.`Enroll`), 10)) = YEAR(CURRENT_DATE())
THEN 1
END)
) AS 'TOTAL ABSENT OF THE MONTH'
FROM emp0003
LEFT JOIN dvc0004 ON emp0003.NIK = dvc0004.NIK
WHERE emp0003.nik = '01190301'
这是我的查询 sql 的结果:
尼克 | 姓名 | 本月缺勤总数 |
---|---|---|
01190301 | 苏珊 | 1 |
应该是结果:
尼克 | 姓名 | 本月缺勤总数 |
---|---|---|
01190301 | 苏珊 | 0 |
因为到目前为止,这个月只过了一个“星期天”
解决方案
如果我理解正确,您想计算工作日(周一至周六)的任何员工缺勤。要实现这一点,您需要知道给定日期范围内的工作日数以及这些天是否有任何员工。
您可以通过下面的代码行轻松计算周一到周六之间员工的存在情况(考虑到LEFT ( ( dvc0004
. Enroll
), 10 )表示有效日期)
(CASE WHEN weekday(LEFT ( ( `dvc0004`.`Enroll` ), 10 ) )>0 then 1 else 0 end) AS 'TOTAL ABSENT OF THE MONTH'
但是仅仅从 current_date() 中减去计数是行不通的。您还需要考虑当月第一天和当前日期的星期日数。在这里,我分享一个链接来实现这一点:
推荐阅读
- joomla - 在查询中使用字段值(Seblod 查询插件)
- python - 在 Python 中使用 REST 连接到 SharePoint 和读取数据时如何解决 JSON 解码器问题
- python - \Z end of line reagex count 查找不在绝对行尾的东西
- python - 在 EMR 上部署 Bokeh 服务器
- javascript - Vue.js Element-UI 和 axios 文件上传导致页面刷新
- c# - 为什么我不能在 Start() 方法之外使用 ParticleSystem.Emit()?
- r - 添加到现有数据框时为什么会得到 .index 和 .value
- r - 我在 R 中使用 h2o.predict 函数时遇到问题
- spring - 从用户密钥斗篷中取消链接社交提供者
- php - Laravel Eloquent 相当复杂的关系