Java 计算mysql中的总登录注销时间
我想使用上述数据显示员工的总工作时间。所以我需要一个mysql查询来计算say employeeIdNo=1的总时间。我的表名是timing,employeeIdNo是来自employee表的外键引用。计算后,它应该返回TotalogTime值=00:45:52这是近似值,我没有精确计算。请提供适当的查询。提前谢谢 我试过这个问题-Java 计算mysql中的总登录注销时间,java,mysql,Java,Mysql,我想使用上述数据显示员工的总工作时间。所以我需要一个mysql查询来计算say employeeIdNo=1的总时间。我的表名是timing,employeeIdNo是来自employee表的外键引用。计算后,它应该返回TotalogTime值=00:45:52这是近似值,我没有精确计算。请提供适当的查询。提前谢谢 我试过这个问题- mysql> select * from timing; +--------------+---------------------+-----------
mysql> select * from timing;
+--------------+---------------------+-----------------+
| employeeIdNo | employeeLogTime | employeeLogType |
+--------------+---------------------+-----------------+
| 1 | 2011-08-16 14:59:08 | login |
| 1 | 2011-08-16 15:00:06 | logout |
| 1 | 2011-08-16 15:14:51 | login |
| 2 | 2011-08-16 15:15:00 | login |
| 1 | 2011-08-16 15:59:01 | logout |
| 2 | 2011-08-16 15:59:09 | logout |
+--------------+---------------------+-----------------+
它给了我如上所示的空集。您不能为单个用户计算所有时间的总和: 要在毫秒内登录,请将其称为 要在毫秒内注销,请调用此B 并返回B-A 作为一种查看方法,它有点含糊其辞,但提供了更简单的sql查询。 您还需要检查使用此方法登录和注销的次数是否相同。通过将登录更改为1并将注销更改为0来修改employeeLogType列。 该表将如下所示:
mysql> SELECT
TIMEDIFF(FIRSTTIME.employeeLogTime,SECONDTIME.employeeLogTime)
FROM (
(SELECT * FROM timing HAVING employeeLogTime = max(employeeLogTime)) as FIRSTTIME,
(SELECT * FROM timing ORDER BY employeeLogTime LIMIT 1,1) as SECONDTIME);
Empty set (0.01 sec)
查询以显示所有员工的总时间:
mysql> select * from timing;
+--------------+---------------------+-----------------+
| employeeIdNo | employeeLogTime | employeeLogType |
+--------------+---------------------+-----------------+
| 1 | 2011-08-16 14:59:08 | 1 |
| 1 | 2011-08-16 15:00:06 | 0 |
| 1 | 2011-08-16 15:14:51 | 1 |
| 2 | 2011-08-16 15:15:00 | 1 |
| 1 | 2011-08-16 15:59:01 | 0 |
| 2 | 2011-08-16 15:59:09 | 0 |
+--------------+---------------------+-----------------+
查询以显示特定员工的总时间:
mysql> SELECT employeeIdNo, time(sum(employeeLogTime*(1-2*`employeeLogType`)))
FROM timing GROUP BY employeeIdNo;
检查dis
mysql> SELECT employeeIdNo, time(sum(employeeLogTime*(1-2*`employeeLogType`)))
FROM timing where employeeIdNo=(employeeIdNo) GROUP BY employeeIdNo;
我同意,但是你能为我提供上面d的mysql查询吗?只计算登录和注销是不起作用的,你还必须确保它们匹配,即每个登录都有匹配的注销我不想计算登录和注销。我想通过mysql查询employeeIdNo='x'的特定员工的总时间。@akshay我明白,我是在评论Snicolas语句,您还需要检查使用此方法登录和注销的次数是否相同。这还不够,只有减去匹配的登录和注销的总和,才能得到正确的总和。k,抱歉。。但是我得到了一个解决方案,可能是Hi@Akshay的副本,如果可能的话,你能解释一下,它是如何工作的吗?我认为这是最好的答案。非常感谢@yeya谢谢你:
SELECT employeeIdNo ,sec_to_time(SUM(TIME)) FROM
(
SELECT
TO_SECONDS(employeeLogTime ) * -1 AS TIME
FROM connection
WHERE employeeLogType = 1
UNION
SELECT
TO_SECONDS(employeeLogTime ) * 1 AS TIME
FROM connection
WHERE employeeLogType = 0
) t
;
select employeeIdNo,
sum(loginTimeInSec) as loginTimeInSec
from(
select
e1.employeeIdNo,
TIME_TO_SEC(TIMEDIFF(e2.employeeLogTime,e1.employeeLogTime)) as loginTimeInSec
from
timing e1 join timing e2
on e1.employeeIdNo = e2.employeeIdNo
and e1.employeeLogType = 'login'
and e2.employeeLogType = 'logout'
and e1.employeeLogTime < e2.employeeLogTime
group by e1.id having min(e2.employeeLogTime - e1.employeeLogTime)
) temp
group by employeeIdNo;