达梦数据库现有 考勤人数 CHECK_WORKS 考勤日期 REPORT_DATE 主键 id 我该如何查出上个月考勤天数平均人数未达标的id 平均考勤达标要求大于80为达标 我只要返回id
时间: 2024-05-15 13:16:05 浏览: 153
以下是一种可能的SQL查询语句,可以查出上个月考勤天数平均人数未达标的id:
```
SELECT id
FROM CHECK_WORKS
WHERE REPORT_DATE >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1' MONTH)
AND REPORT_DATE < DATE_TRUNC('month', CURRENT_DATE)
GROUP BY id
HAVING AVG(CASE WHEN CHECK_WORKS = '出勤' THEN 1 ELSE 0 END) / COUNT(DISTINCT REPORT_DATE) < 0.8
```
解释:
- `DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1' MONTH)` 表示上个月的月初日期;
- `DATE_TRUNC('month', CURRENT_DATE)` 表示本月的月初日期;
- `AVG(CASE WHEN CHECK_WORKS = '出勤' THEN 1 ELSE 0 END) / COUNT(DISTINCT REPORT_DATE)` 表示每个人上个月的考勤天数平均值;
- `HAVING AVG(...) < 0.8` 表示筛选出平均考勤达标要求大于80为达标的人。
请注意,以上语句仅供参考,具体实现可能需要根据实际情况进行调整。
相关问题
达梦数据库现有 考勤人数 CHECK_WORKS 考勤日期 REPORT_DATE 主键 id 我该如何查出上个月考勤天数平均人数未达标的id 平均考勤达标要求大于80为达标
以下是一种可能的解决方案:
```
SELECT id, COUNT(*) AS attendance_days, AVG(CHECK_WORKS) AS average_attendance
FROM 表名
WHERE REPORT_DATE >= DATEADD(month, -1, GETDATE()) AND REPORT_DATE < GETDATE()
GROUP BY id
HAVING AVG(CHECK_WORKS) < 80
```
解释:
1. WHERE 子句限制了查询的时间范围为上个月。
2. GROUP BY 子句根据 id 进行分组,统计每个 id 的考勤天数和平均考勤。
3. HAVING 子句筛选出平均考勤达标要求小于 80 的 id。
需要注意的是,这只是一种可能的解决方案,具体的查询语句可能因数据库结构和数据特点而有所不同。
阅读全文