Java 计算mysql中的总登录注销时间

Java 计算mysql中的总登录注销时间,java,mysql,Java,Mysql,我想使用上述数据显示员工的总工作时间。所以我需要一个mysql查询来计算say employeeIdNo=1的总时间。我的表名是timing,employeeIdNo是来自employee表的外键引用。计算后,它应该返回TotalogTime值=00:45:52这是近似值,我没有精确计算。请提供适当的查询。提前谢谢 我试过这个问题- mysql> select * from timing; +--------------+---------------------+-----------

我想使用上述数据显示员工的总工作时间。所以我需要一个mysql查询来计算say employeeIdNo=1的总时间。我的表名是timing,employeeIdNo是来自employee表的外键引用。计算后,它应该返回TotalogTime值=00:45:52这是近似值,我没有精确计算。请提供适当的查询。提前谢谢

我试过这个问题-

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;