一张考勤表,每天会打多次卡,我想拿到每个员工一年中最晚打卡日期和时间,这个sql怎么写,目前我只能取到最晚时间,不知道怎么取到最晚时间对应的日期
可以首先group by 员工编号和年份 然后再用 min函数取日期时间,就能得到每一年的每个员工最小的打卡时间
首先感谢您的回答,但是可能理解有偏差,首先日期指年月日,时间是时分秒,我要取的是一年中每个人的最晚打卡的时间,包括其中的日期
@流静水深: 最晚是怎么定义啊 00:00:00是最晚 还是23:59:59最晚?
@码农小易: 考虑到可能有凌晨的情况,目前是确定打卡时间在凌晨5点前算加班打卡,所以04:59:59为最晚
@流静水深: 这个应用场景我很感兴趣,我愿意跟你交流一下,能加个Q吗237972113,你把数据库原表发给我,我帮你写一下。
@流静水深: 那么坑?凌晨5点前算加班打卡,难道真有人打这么晚吗?
@人间春风意: 这个紧急上线肯定会有通宵的情况的
@流静水深: 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
有最晚的时间了,子查询让时间等于这个最晚的时间不就可以拿到这条打卡记录了吗
看来也只能这样了,非常感谢