MySQL - CONSULTA DIFERENCIA TIEMPO COMPLICADA

   
Vista:

CONSULTA DIFERENCIA TIEMPO COMPLICADA

Publicado por ANTONIO (33 intervenciones) el 14/10/2015 09:29:18
Saludos amigos tengo una duda sobre como se puede hacer una consulta de este tipo:
Os planteo, tabla datos con siguientes campos, nombre, tiempo, diferencia
pepe, 01:00:00
juan, 01:05:00
mario:01:10:00

Quiero hacer una consulta de esa tabla y meter los datos en otra tabla llamada tiempos con los siguientes campos nombre, tiempo, diferencia donde aparezca lo siguiente:

pepe 01:00:00 00:00:00
juan 01:05:00 00 05:00
maio 01:10:00 00:10:00

Es decir quiero saber la diferencia de tiempo que tienen todos los registros sobre el primer registro.
Esto es como una carrera de coches que cuando entra el primero, se calcula la diferencia de tiempo del resto a partir del tiempo realizado por el primero.

Espero haberme explicado bien pero es una consulta super complicada por lo menos para mi ya que tengo que tener en cuenta el tiempo del primero para calcular la diferencia del resto de personas.
Gracias espero respuesta.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

CONSULTA DIFERENCIA TIEMPO COMPLICADA

Publicado por Rafael (55 intervenciones) el 14/10/2015 10:46:12
Como siempre ayudar nos deja una gran tarea por que no nos brindan los datos de forma que podamos copiar y pegar si no que hay que hacerlo todo...

Como sea aqui el ejemplo:

Supondre la tabla se llama Resultados:
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE Resultados
(  nombre varchar(15)
 , tiempo time)
;
 
INSERT INTO Resultados
VALUES
('Pepe', '01:00:00'),
('Juan', '01:05:00'),
('Mario', '01:10:00'),
('Raul', '01:10:25')
;

Asi pues la creo e inserto los datos.
Aqui la consulta:
1
2
3
4
5
6
7
SELECT nombre
     , TIME_FORMAT(tiempo, '%H:%i:%S') AS Tiempo
     , TIME_FORMAT(tiempo-MINIMO, '%H:%i:%S') as Diferencia
FROM   Resultados
     , (SELECT MIN(tiempo) AS MINIMO
        FROM   Resultados) QM1
;

Y el resultado:
Imagen

Bueno si quieres crear otra tabla pues espero que eso ya te sea mas sencillo pero por si las moscas podrias hacer:
1
2
3
4
5
6
7
8
Create Table Resultados_2
SELECT nombre
     , TIME_FORMAT(tiempo, '%H:%i:%S') AS Tiempo
     , TIME_FORMAT(tiempo-MINIMO, '%H:%i:%S') as Diferencia
FROM   Resultados
     , (SELECT MIN(tiempo) AS MINIMO
        FROM   Resultados) QM1
;


Saludos ...
Pd. Y si te sirve a ti mi ayuda a mi me sirve el +1 que me otorgues.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

CONSULTA DIFERENCIA TIEMPO COMPLICADA

Publicado por ANTONIO (33 intervenciones) el 14/10/2015 21:31:37
Saludos rafael el ejemplo esta de lujo y funciona, pero tengo un problema que es el siguiente la base de datos mysql es compartida y tengo que coger los datos de la tabla en cuestión.
El problema obvio es que tu me pones el ejemplo como que el tiempo de cada persona es del tipo time, cosa que es lo lógico, pero a mi me pasan la tabla con el mencionado tiempo pero de tipo varchar, es decir 01:12:23 pero es un varchar y no un time.
Existe algo que convierta el varchar a tiempo y que tu ejemplo funcione ya que al ser varchar no funciona como se espera.
Saludos y gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CONSULTA DIFERENCIA TIEMPO COMPLICADA

Publicado por Rafael (55 intervenciones) el 15/10/2015 08:54:16
Puedes probar con:

1
STR_TO_DATE(fecha, '%H:%i:%S')

Con esto la transformas a fecha y con ello debe funcionar...

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CONSULTA DIFERENCIA TIEMPO COMPLICADA

Publicado por ANTONIO (33 intervenciones) el 15/10/2015 14:11:56
Bueno Rafael no te molesto mas esta la última.
En referencia al código de arriba.
Imagina que ya tengo la tabla con los campos nombre y campos tiempo tipo datetime, pero además tengo un campo en esa tabla vacio llamado diferencia.
Si quiere poner mediante un update la diferencia en ese campo como se haría?
Yo he puesto esta cosulta:
Dim SSQL As String = "set @group = (select MIN(META) from tblgraf);update tblgraf set diferencia=TIME_FORMAT(META - @group,'%H:%i:%S');"

Pero me mete el tiempo en el campo diferencia pero no resta el tiempo como tendría que hacerlo no se si me falta algo o no.
En la consulta primero he seleccionado el tiempo mas bajo y a partir de ahi con el update he intentado restar ese tiempo al tiempo de cada participante pero no da el resultado esperado.
Gracias te puntuaré como te mereces :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CONSULTA DIFERENCIA TIEMPO COMPLICADA

Publicado por Rafael (55 intervenciones) el 15/10/2015 15:00:19
Vaya y has probado poner???
1
Dim SSQL As String = "update tblgraf set diferencia=TIME_FORMAT(META - (select MIN(META) from tblgraf),'%H:%i:%S');"

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CONSULTA DIFERENCIA TIEMPO COMPLICADA

Publicado por ANTONIO (33 intervenciones) el 15/10/2015 17:43:45
No funciona da error dice :
#HY000You can't specify target table 'tblgraf' for update in FROM clause

y si a esa calusula le quito de de tblgraf y lo dejo como
Dim SSQL As String = "update tblgraf set diferencia=TIME_FORMAT(META - (select MIN(META)),'%H:%i:%S');"

entonces no da error pero el resultado no es el esperado veras la tabla tiene de inicio:
NOMBRE META DIFERENCIA

PEPE 02:32:08
JUAN 02:32:10

Pues bien al ejecutar la consulta update aparece lo suguiente:

NOMBRE META DIFERENCIA

PEPE 02:32:08 02:32:06
JUAN 02:32:10 02:32:08

es como si el campo diferencia hubiera sido el resultado de restarle a cada meta dos segundos

No lo entiendo.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar