首页 新闻 会员 周边 捐助

考勤取一年中最晚打卡时间

0
悬赏园豆:10 [已解决问题] 解决于 2022-01-13 13:30

一张考勤表,每天会打多次卡,我想拿到每个员工一年中最晚打卡日期和时间,这个sql怎么写,目前我只能取到最晚时间,不知道怎么取到最晚时间对应的日期

流静水深的主页 流静水深 | 初学一级 | 园豆:172
提问于:2022-01-12 20:48
< >
分享
最佳答案
1

可以首先group by 员工编号和年份 然后再用 min函数取日期时间,就能得到每一年的每个员工最小的打卡时间

收获园豆:8
Timothy-Lau | 菜鸟二级 |园豆:351 | 2022-01-13 00:40

首先感谢您的回答,但是可能理解有偏差,首先日期指年月日,时间是时分秒,我要取的是一年中每个人的最晚打卡的时间,包括其中的日期

流静水深 | 园豆:172 (初学一级) | 2022-01-13 09:31

@流静水深: 最晚是怎么定义啊 00:00:00是最晚 还是23:59:59最晚?

Timothy-Lau | 园豆:351 (菜鸟二级) | 2022-01-13 09:32

@码农小易: 考虑到可能有凌晨的情况,目前是确定打卡时间在凌晨5点前算加班打卡,所以04:59:59为最晚

流静水深 | 园豆:172 (初学一级) | 2022-01-13 09:33

@流静水深: 这个应用场景我很感兴趣,我愿意跟你交流一下,能加个Q吗237972113,你把数据库原表发给我,我帮你写一下。

Timothy-Lau | 园豆:351 (菜鸟二级) | 2022-01-13 09:49

@流静水深: 那么坑?凌晨5点前算加班打卡,难道真有人打这么晚吗?

人间春风意 | 园豆:2780 (老鸟四级) | 2022-01-13 10:06

@人间春风意: 这个紧急上线肯定会有通宵的情况的

流静水深 | 园豆:172 (初学一级) | 2022-01-13 10:08

@流静水深: SELECT
a3.*
FROM
(
SELECT
*,
@time := (SECOND ( sheet1.CURRENT_TIME ) + ( MINUTE ( sheet1.CURRENT_TIME ) * 60 ) + ( HOUR ( sheet1.CURRENT_TIME ) * 3600 )),
(
CASE WHEN @time >= 18000 THEN
@time - 18000 ELSE @time + 86400
END
) AS SECOND_TIME
FROM
sheet1
) AS a3
JOIN
(SELECT
a1.EMPLOYEE_CODE, MAX(a1.SECOND_TIME) as MAX_SECOND_TIME
FROM
(
SELECT
*,
@time := (SECOND ( sheet1.CURRENT_TIME ) + ( MINUTE ( sheet1.CURRENT_TIME ) * 60 ) + ( HOUR ( sheet1.CURRENT_TIME ) * 3600 )),
(
CASE WHEN @time >= 18000 THEN
@time - 18000 ELSE @time + 86400
END
) AS SECOND_TIME
FROM
sheet1
) AS a1
GROUP BY
a1.EMPLOYEE_CODE
) as a2
on a3.SECOND_TIME = a2.MAX_SECOND_TIME and a3.EMPLOYEE_CODE = a2.EMPLOYEE_CODE
ORDER BY
EMPLOYEE_CODE

Timothy-Lau | 园豆:351 (菜鸟二级) | 2022-01-13 13:18
其他回答(1)
1

有最晚的时间了,子查询让时间等于这个最晚的时间不就可以拿到这条打卡记录了吗

收获园豆:2
Abserver | 园豆:201 (菜鸟二级) | 2022-01-12 21:29

看来也只能这样了,非常感谢

支持(0) 反对(0) 流静水深 | 园豆:172 (初学一级) | 2022-01-13 09:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册