登录注销考勤时间
Posted
技术标签:
【中文标题】登录注销考勤时间【英文标题】:Login logout attendance checktime 【发布时间】:2013-10-26 19:21:07 【问题描述】:我有这样的考勤程序的mysql数据(表):
+--------+--------------------+-----------+
| userid | checktime | checktype |
+-----------------------------+-----------+
| 1 | 26/04/2013 8:05:17 | I |
| 2 | 26/04/2013 8:05:17 | I |
| 2 | 26/04/2013 17:28:47| O |
| 3 | 26/04/2013 17:32:24| O |
+-----------------------------------------+
我想要这样的预览:
+--------+--------------------+---------------------+
| userid | Login time | Logout time |
+-----------------------------+---------------------+
| 1 | 26/04/2013 8:05:17 | Null |
| 2 | 26/04/2013 8:05:17 | 26/04/2013 17:28:47 |
| 3 | Null | 26/04/2013 17:32:24 |
+---------------------------------------------------+
我应该如何编写查询来预览此输出?任何建议都会对我有所帮助。请帮助...
【问题讨论】:
应该假设只能找到2个相同的userid,每个都有I
或者O
,对吧?
用户3不先登录怎么退出?
就像司机一样,下午结账。有时人们忘记签到(指纹程序)。签到时间可以在班次表中找到
【参考方案1】:
根据您提供的信息,这个查询应该可以做到:
SELECT
userid,
max(if(checktype = 'I', checktime, NULL)) loginTime,
max(if(checktype = 'O', checktime, NULL)) logoutTime
FROM t
GROUP BY userid
输出:
| USERID | LOGINTIME | LOGOUTTIME |
|--------|--------------------|---------------------|
| 1 | 26/04/2013 8:05:17 | (null) |
| 2 | 26/04/2013 8:05:17 | 26/04/2013 17:28:47 |
| 3 | (null) | 26/04/2013 17:32:24 |
小提琴here.
【讨论】:
以上是关于登录注销考勤时间的主要内容,如果未能解决你的问题,请参考以下文章