简体   繁体   English

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

[英]calculate total login logout time in mysql

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          |
+--------------+---------------------+-----------------+

I want to display the total working time of employee using above data.我想使用上述数据显示员工的总工作时间。 so i want a mysql query to calculate the total time of(say) employeeIdNo=1.所以我想要一个 mysql 查询来计算(比如说)employeeIdNo=1 的总时间。 my table name is timing and employeeIdNo is the foreign key references from table employee.我的表名是时间,employeeIdNo 是表employee 的外键引用。 after calculation it should return me the totalLogTime value = 00:45:52(this is approx. value, i didnt calculated it exactly).计算后它应该返回给我 totalLogTime 值 = 00:45:52(这是大约值,我没有准确计算)。 please provide me with appropriate query.请向我提供适当的查询。 thanks in advance.提前致谢。

i tried this query.:-我试过这个查询。:-

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)

its giving me empty set as shown above.它给了我空集,如上图所示。

Couldn't you sum all times for a single user:你不能为单个用户总结所有时间:

  • for login (in milliseconds) call this A登录(以毫秒为单位)调用此 A
  • for logout (in milliseconds) call this B注销(以毫秒为单位)调用此 B

and return B - A;并返回 B - A;

It's a bit ackward as a way to see it but gives much simpler sql queries.作为一种查看方式,这有点不合时宜,但提供了更简单的 sql 查询。 You also need to check that login and logouts have same number of occurences with this method.您还需要使用此方法检查登录和注销的出现次数是否相同。

Check dis检查显示

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;

Modify the employeeLogType column by changing login to 1 and logout to 0 .通过将login更改为1并将logout更改为0来修改employeeLogType列。 The table will look like:该表将如下所示:

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               |
+--------------+---------------------+-----------------+

Query to display total time of all employees:查询显示所有员工的总时间:

mysql> SELECT employeeIdNo, time(sum(employeeLogTime*(1-2*`employeeLogType`)))
FROM timing GROUP BY employeeIdNo;

Query to display total time of particular employee:查询显示特定员工的总时间:

mysql> SELECT employeeIdNo, time(sum(employeeLogTime*(1-2*`employeeLogType`)))
FROM timing where employeeIdNo=(employeeIdNo) GROUP BY employeeIdNo;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM