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. my table name is timing and employeeIdNo is the foreign key references from table employee. after calculation it should return me the totalLogTime value = 00:45:52(this is approx. value, i didnt calculated it exactly). 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;
It's a bit ackward as a way to see it but gives much simpler sql queries. 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
. 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;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.