问题描述
我办公室的考勤机有点问题。我想将 1 列中的进出时间分开。我在两周内尝试了很多查询,但无法得到我想要的。我想将 PunchDatetime 列中的值分成 2 个新列,即输入和输出,之后我想将此数据移动到 MysqL。我使用的数据库是 Microsoft Access,我使用的语言是 PHP。这是我的 ms access 数据库:
我的 MS Access 数据库:
和我的期望,我会有这样的输出:
我的期望:
有人可以帮我吗?之前感谢并抱歉我的英语不好
解决方法
您可以使用 MIN/MAX 子查询来获取您想要的信息:
SELECT DISTINCT T.CardNo,Format(T.PunchDateTime,"dd/mm/yyyy") AS PunchDate,(SELECT Format(MIN(S.PunchDateTime),"hh:nn") FROM Tran_MachineRawPunch AS S WHERE S.CardNo=T.CardNo AND Format(S.PunchDateTime,"dd-mm-yyyy")=Format(T.PunchDateTime,"dd-mm-yyyy")) AS PunchIn,(SELECT Format(MAX(S.PunchDateTime),"dd-mm-yyyy")) AS PunchOut
FROM Tran_MachineRawPunch AS T
请注意,对于只有一个条目的任何一天(例如 2 月 2 日和 2 月 6 日),这两个时间将相同 - 您可以通过转换为 GROUP BY
查询并查看条目数等于 2,否则添加 where 子句以排除那些两次匹配的条目。
问候,
,这将在两天内完成:
Select
[Employee ID],Int([PunchDatetime]) As [Date],Min([PunchDatetime]) As [In],Max([PunchDatetime]) As [Out]
From
Tran_MachineRawPunch
Group By
[Employee ID],Int([PunchDatetime])
对于那些只用一拳的日期,它会返回相同的时间。
In 和 Out 值必须仅针对时间进行格式化。