登录注销考勤时间

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.

【讨论】:

以上是关于登录注销考勤时间的主要内容,如果未能解决你的问题,请参考以下文章

在Android中制作考勤应用程序

做个简单的Java学生考勤系统03--登录功能的开发

考勤系统的数据怎么导入到OA系统 通达OA2009

性能测试案例

企业员工批量排班考勤系统

企业员工批量排班考勤系统