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 |
+--------------+---------------------+-----------------+
我想显示使用上述数据的员工的总工作时间。所以我想要一个mysql查询来计算(比方说)employeeIdNo = 1的总时间。我的表名是timing,employeeIdNo是表employee的外键引用。在计算之后它应该返回totalLogTime值= 00:45:52(这是大约值,我没有完全计算它)。请提供适当的查询。提前谢谢。
我尝试了这个查询。: -
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)
它给我空集如上所示。
答案 0 :(得分:3)
无法为单个用户总结所有时间:
并返回B - A;
作为一种查看它的方式有点尴尬,但提供了更简单的SQL查询。 您还需要使用此方法检查登录和注销是否具有相同的出现次数。
答案 1 :(得分:0)
通过将employeeLogType
更改为login
并将1
更改为logout
来修改0
列。
该表格如下:
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;
查询以显示特定员工的总时间:
mysql> SELECT employeeIdNo, time(sum(employeeLogTime*(1-2*`employeeLogType`)))
FROM timing where employeeIdNo=(employeeIdNo) GROUP BY employeeIdNo;
答案 2 :(得分:0)
检查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
;
答案 3 :(得分:0)
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;