【发布时间】:2021-02-08 04:30:55
【问题描述】:
我在计算一个月内的员工缺勤率时遇到问题。在我的查询中,它仍然计算本月“星期日”的日期,这不应该计算在内。
这是一个使用的示例数据库:
emp0003 表的
| NIK | Name |
|---|---|
| 01190301 | Susan |
dvc0004 表的
| NIK | Enroll |
|---|---|
| 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 的结果:
| NIK | Name | TOTAL ABSENT OF THE MONTH |
|---|---|---|
| 01190301 | Susan | 1 |
应该是结果:
| NIK | Name | TOTAL ABSENT OF THE MONTH |
|---|---|---|
| 01190301 | Susan | 0 |
因为到目前为止,这个月只过了一个“星期日”
【问题讨论】:
-
请包含一个 db fiddle 演示(如果您想要高质量的答案而无需长时间等待)。这是 SQLServer 还是 MySQL?
-
样本数据(如 DDL+DML)和预期结果是这些问题的必备条件。
-
我添加了一个示例数据库、我的查询结果和我想要的结果.. @mickmackusa
-
@DaleK :我添加了一个示例数据库、我的查询结果和我想要的结果。
-
db fiddle 演示在哪里?我主要通过手机做志愿者,所以我很少花时间创建一个模式来解决别人的问题。使用 db fiddle,您的问题将变得更有吸引力。