MySQL - Consulta SELECT MIN()

 
Vista:
Imágen de perfil de Roderick

Consulta SELECT MIN()

Publicado por Roderick (4 intervenciones) el 20/01/2017 19:33:52
Hola Buen dia a todos

ESTOY DESARROLLANDO UN PROYECTO CON BASES DE DATOS Y USO MYSQL

Bueno Mi problema es el siguiente tengo la siguiente consulta sql:


1
"SELECT distinct placa ,MAX(kmfinal) AS kmfinal, MAX(proxmante) AS proxmante, MIN(kmrest) AS kmrest FROM control GROUP BY placa"

Si la leen y entienden saben que lo que consulto el el maximo kilometraje final y el maximo proximomantenimiento adicional el MINIMO KILOMETRAJE RESTANTE.

PERO LA CONSULTA MIN NO ME DEVUELVE EL VALOR QUE EN VERDAD ES EL MENOR.

AQUI UNA IMAGEN:


11


COMO VEN AYI ESTA EL 400 QUE ES EL MENOR PERO LA CONSULTA ME DEVUELVE 2000 QUE NO DEBE SER.

AQUI LA IMAGEN DONDE DEVUELVE EL VALOR ERRONEO.



DSDS


LO QUE EH PODIDO NOTAR ES QUE CADA VE QUE EL VALOR QUE CONSULTO ES MENOR A MIL NO LO MUESTRA SINO QUE MUESTRA EL ANTERIOR SI ESTE ES MAYOR O IGUAL A 1000.

SI ALGUIEN SABE ALGO ME AYUDE!!
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
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Consulta SELECT MIN()

Publicado por xve (1151 intervenciones) el 21/01/2017 09:52:49
Hola Roderick, creo que lo que estas intentando hacer no es del todo posible...

No puede devolverte en un solo select, los valores max() de un registro y el min() de otro registro.

Por ejemplo:

id - a - b
1 - 5 - 1
2 - 1 - 5

En un solo select, no te puede devolver por ejemplo:
id 1, a=5 b=5
ya que el id 1 no tiene el b con valor 5


Para solucionar tu problema, una manera, es con un join, juntando dos consultas, una que devuelve el max() y otra que devuelve el min()... algo así:
1
2
3
4
5
SELECT S1.*,S2.kmrest FROM
(SELECT placa ,MAX(kmfinal) AS kmfinal FROM control GROUP BY placa) S1
LEFT JOIN
(SELECT placa ,MIN(kmrest) AS kmrest FROM control GROUP BY placa) S2
ON S1.placa=S2.placa

Si lo puedes probar y comentarnos...
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
Imágen de perfil de Roderick

Consulta SELECT MIN()

Publicado por Roderick (4 intervenciones) el 24/01/2017 17:31:36
Probando...
Gracias por responder
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
Imágen de perfil de Roderick

Consulta SELECT MIN()

Publicado por Roderick (4 intervenciones) el 24/01/2017 20:34:03
he utilizado tu consulta pero me arroja el mismo dato:
he agregado un registro mas osea una matricula de automovil con datos de su kilometraje aqui te lo muestro:

Captura

si notas mas abajo estan los registros de la matricula 940756 el valor minimo de Kilometraje restante es 200 sin enbargo me muestra 1000.

1
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
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Consulta SELECT MIN()

Publicado por xve (1151 intervenciones) el 25/01/2017 08:17:27
Hola Roderick, no entiendo muy bien como sabes que no funciona bien?
Cual es el valor máximo de kmfinal y mínimo de kmrest que hay en la base de datos para la placa 101211?

Entiendo que son campos numéricos, verdad?
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
Imágen de perfil de Roderick

Consulta SELECT MIN()

Publicado por Roderick (4 intervenciones) el 25/01/2017 14:29:10
Hola he encontrado la solucion :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT i.placa, CAST( i.kmrest AS DECIMAL ) kmrest, MAX(i.fecha) fecha
FROM control i
INNER JOIN (
    SELECT c.placa placa, MIN( CAST( kmrest AS DECIMAL ) ) kmrest
    FROM control c
    INNER JOIN (
        SELECT DISTINCT ( placa ) placa
        FROM control
    ) p
        ON p.placa = c.placa
    GROUP BY p.placa
) f
ON i.placa = f.placa AND i.kmrest = f.kmrest
GROUP BY i.placa, i.kmrest, i.fecha
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