我需要获取数据库中的第一个日志并确定延迟了多少分钟并将其总结。 java

I need to get the first log in database and determine how many minutes late and sum it up. java

这是我的数据库的示例

-table 条记录

name    loginDate     loginTime  
Chin    2015-01-02    9:00  
Chris   2015-01-02    9:40  
Chin    2015-01-02    10:00  
Chris   2015-01-02    10:09  
Chin    2015-01-03    8:00  
Chin    2015-01-03    9:00  
Chris   2015-01-03    9:01  
Chris   2015-01-03    9:03 

-table 员工

name    startingTime  
Chin    8:30  
Chris   9:00 

所以基本上,我需要一个查询,它可以 return 仅当天的第一次登录,并通过比较另一个 table 中的 startingTime 来确定他是否迟到,并得到他们的分钟数。 return 值应该是:

Chin    2015-01-02    9:00  30
Chris   2015-01-02    9:40  40
Chris   2015-01-03    9:01  1

我使用此代码来确定首次登录和延迟分钟数:

SELECT t.name, t.logindate, t.loginTime, timestampdiff(minute, t1.startingTime, 
t.loginTime) as is_late 
FROM 
(   SELECT name, loginDate, TIME(MIN(loginTime)) as loginTime
    FROM records  
   GROUP BY name, loginDate
) t 
JOIN employee t1 ON t.name = t1.name
HAVING is_late > 0

现在,我想弄清楚如何总结每个名字的所有迟到分钟数。 return 值应该是这样的:

name    date          logIn minLate  totalMinLate
Chin    2015-01-02    9:00  30       30
Chris   2015-01-02    9:40  40       41
Chris   2015-01-03    9:01  1        41

或者你可以给我一个很好的其他方法来让每个名字都没有冗余的总迟到分钟数。

PS。我正在使用 java netbeans

如果您能给我一个可以帮助我获得我需要的确切 return 值的查询,谢谢!

假设此声明有效:

SELECT t.name, t.logindate, t.loginTime, if(timestampdiff(minute, 
t1.startingTime, t.loginTime) > 0, timestampdiff(minute, t1.startingTime, 
t.loginTime), 0) as minLate 
FROM 
(   SELECT name, loginDate, TIME(MIN(loginTime)) as loginTime
    FROM records  
   GROUP BY name, loginDate
) t 
JOIN employee t1 ON t.name = t1.name
HAVING is_late > 0

然后你能运行像这样的东西吗:

SELECT name, logindate, sum(minLate)
from (
SELECT t.name, t.logindate, t.loginTime, if(timestampdiff(minute, 
t1.startingTime, t.loginTime) > 0, timestampdiff(minute, t1.startingTime, 
t.loginTime), 0) as minLate 
FROM 
(   SELECT name, loginDate, TIME(MIN(loginTime)) as loginTime
    FROM records  
   GROUP BY name, loginDate
) t 
JOIN employee t1 ON t.name = t1.name
HAVING is_late > 0) 
group by name, logindate