我有这样的表Att_Log:
Emp_ID | 日期_Att | 时间_Att |
---|---|---|
E-0123 | 2024-01-02 | 08:05:56 |
E-0123 | 2024-01-02 | 17:02:23 |
E-0124 | 2024-01-02 | 21:55:56 |
E-0124 | 2024-01-03 | 06:02:23 |
我期望的结果是这样的:
Emp_ID | 日期 | In_Time | Out_Time |
---|---|---|---|
E-0123 | 2024-01-02 | 08:05:56 | 17:02:23 |
E-0124 | 2024-01-02 | 21:55:56 | 06:02:23 |
如果 In_Time >= 21:00:00,则从以下 Date_Att 获取 min(Time_Att) 作为 Out_Time
如何在mysql服务器中查询?
我可以使用此查询查询最小和最大 Time_Att:
选择 Emp_ID、Date_Att、Min(Time_Att) 作为 InTime、Max(Time_Att) 作为 OutTime, 来自 Att_Log
但我不知道如何得到上面的结果。如果有人可以提供帮助,我将非常感激。预先感谢您。
可能不是您想要的,但给出了问题中示例数据的预期结果。
(假设 DATE_ATT 列的数据类型为 DATE,TIME_ATT 列的数据类型为 TIME。请参阅 MySQL 文档。)
select EMP_ID
,date(min(timestamp(DATE_ATT, TIME_ATT))) as THE_DATE
,time(min(timestamp(DATE_ATT, TIME_ATT))) as IN_TIME
,time(max(timestamp(DATE_ATT, TIME_ATT))) as OUT_TIME
from ATT_LOG
group by EMP_ID
参考thisdb<>fiddle以及这些SO问题: