Ver Mensaje Individual
  #17 (permalink)  
Antiguo 26/05/2015, 10:12
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Tomar el id mínimo de un campo

Volvamos al principio:
Cita:
Iniciado por planmental Ver Mensaje
[...] necesito tomar el valor mínimo de los últimos registros que sean iguales.

Ejemplo:
Código MySQL:
Ver original
  1. id     |   cliente     |      fecha
  2. ------------------------------
  3. 1    |    v1        |       2015-05-20
  4. 2    |    v1        |       2015-05-20
  5. 3    |    v1        |       2015-05-01
  6. 4    |    v1        |       2015-03-05
  7. 5    |    v2        |       2015-02-02
  8. 6    |    v3        |      2015-01-30
  9. 7    |    v1        |       2015-01-01

Me explico: Tengo esa tabla y quiero la fecha del último cliente en este caso es v1 y sí me muestra el último cliente con el id 1 pero no quiero ese, quiero la fecha del último cliente pero en su primer movimiento, pero cuando hago la consulta me sale el id 7.
En ralidad debes razonarlo así:
1) necesitas determinar qué registros repiten valores completos, con exclusion del ID del registro.
Código MySQL:
Ver original
  1. SELECT   T.servicio_id, cliente_id, s.fecha_servicio
  2.     FROM traslado T
  3.          INNER JOIN servicio S ON T.servicio_id = S.servicio_id
  4.          INNER JOIN cliente C ON S.cliente_id = C.cliente_id
  5.    WHERE cliente.alias = "'.$Dias1.'"
  6.      AND tt.remolque_otros = "'.$_GET['s'].'"
  7. GROUP BY T.servicio_id, cliente_id, s.fecha_servicio
  8. HAVING COUNT(*) > 1;
2) Necesitas buscar de esos, el menor de todos, ordenado por cliente;
Código MySQL:
Ver original
  1. SELECT   servicio_id, cliente_id, MIN(fecha_servicio) fecha_servicio
  2.     FROM (SELECT  T.servicio_id, cliente_id, s.fecha_servicio
  3.             FROM traslado T
  4.                  INNER JOIN servicio S ON T.servicio_id = S.servicio_id
  5.                  INNER JOIN cliente C ON S.cliente_id = C.cliente_id
  6.            WHERE cliente.alias = "'.$Dias1.'"
  7.              AND tt.remolque_otros = "'.$_GET['s'].'"
  8.            GROUP BY T.servicio_id, cliente_id, s.fecha_servicio
  9.            HAVING COUNT(*) > 1) T1
  10. GROUP BY servicio_id, cliente_id;
3) Sobre la base d ela lista obtenida, se puede hacer una subconsulta que filtr lo buscado:
Código MySQL:
Ver original
  1. SELECT T.*  
  2. FROM traslado T
  3.      INNER JOIN servicio S ON T.servicio_id = S.servicio_id
  4.      INNER JOIN cliente C ON S.cliente_id = C.cliente_id
  5.      cliente.alias = "'.$Dias1.'"
  6.     AND tt.remolque_otros = "'.$_GET['s'].'"
  7.     AND (T.servicio_id, cliente_id, s.fecha_servicio) IN
  8.         (SELECT   servicio_id, cliente_id, MIN(fecha_servicio) fecha_servicio
  9.             FROM (SELECT  T.servicio_id, cliente_id, s.fecha_servicio
  10.                      FROM traslado T
  11.                           INNER JOIN servicio S ON T.servicio_id = S.servicio_id
  12.                           INNER JOIN cliente C ON S.cliente_id = C.cliente_id
  13.                     WHERE cliente.alias = "'.$Dias1.'"
  14.                       AND tt.remolque_otros = "'.$_GET['s'].'"
  15.                     GROUP BY T.servicio_id, cliente_id, s.fecha_servicio
  16.                     HAVING COUNT(*) > 1) T1
  17.     GROUP BY servicio_id, cliente_id);

La idea central es que vayas resolviendo el problema en etapas. Sin intentas resolverlo todo de un sólo paso no vas a poder. erminarás con codigos confusos y resultados erráticos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)