[英]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:你不能为单个用户总结所有时间:
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.