Tempo total de login do dia atual mysql

Estou tentando calcular o tempo de login do usuário em horas e minutos para o dia atual.

Eu tenho minha tabela de session como

id| user_id | logintime |logouttime | isactive 1| 100 | 2017-06-12 22:53:53 |2017-06-13 02:53:53 | 0 2| 100 | 2017-06-13 08:53:53 |2017-06-13 09:13:53 | 0 3| 100 | 2017-06-13 10:53:53 |2017-06-13 11:33:53 | 0 4| 100 | 2017-06-13 11:53:53 |2017-06-13 12:13:53 | 0 5| 100 | 2017-06-13 12:53:53 |NULL (As user is currently logged in)| 1 

Eu quero uma consulta que pode calcular o dia de login total do dia atual, digamos que a data é 13 hoje. Mais uma coisa que eu quero mencionar é que, no Record id 1, afirma que o usuário fez o login no 12-06-2017, mas como eu precisava de um tempo recorde de 13, então ele começará a partir de 2017-06-13 00:00:00 (como hora de login desse dia).

Desde já, obrigado. EDITAR:

Até agora, eu tentei o que está dando cálculos errados para o ID 1 e 5. Para o ID 1, está calculando os minutos de ontem também e para o 5º está dando nulo à medida que o usuário está logado no momento

 SELECT TIMESTAMPDIFF(minute,logintime,logouttime) FROM `table` WHERE user_id= 17 and DATE(logouttime) = DATE(UTC_TIMESTAMP) 

Para sessões ativas, você pode usar CURRENT_TIMESTAMP vez do valor de logouttime . Crie uma vista com timestamps corrigidos para evitar duplicar a mesma subsequência de seleção na sua consulta:

 CREATE VIEW sessions_view AS SELECT user_id, logintime, IF(isactive, CURRENT_TIMESTAMP, logouttime) AS logouttime FROM sessions_table; 

Para dividir sessões que passam de um dia para outro, use syntax UNION com condições. Use a function TIMESTAMPDIFF para obter a diferença entre o tempo de logintime e os valores de logouttime . Para obter a duração agregada que é o tipo de dados do tempo, use a function de agregação SUM e SEC_TO_TIME para converter segundos para o valor DATETIME :

 SELECT user_id, DATE(logintime) AS `day`, SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND, logintime, logouttime))) FROM (SELECT user_id, logintime, IF(DATE(logouttime)>DATE(logintime), TIMESTAMP(DATE(logouttime)), logouttime) AS logouttime FROM sessions_view UNION ALL SELECT user_id, TIMESTAMP(DATE(logouttime)) AS logintime, logouttime FROM sessions_view WHERE DATE(logouttime)>DATE(logintime)) splited_sessions GROUP BY user_id, `day`; 

Se você deseja obter dados apenas para data específica, então acrescente a seguinte cláusula WHERE à consulta:

 WHERE DATE(logintime) = '2017-06-13'