Ver Mensaje Individual
  #6 (permalink)  
Antiguo 06/11/2013, 08:02
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: Obtener el registro mas alto

Lo que no puede estar sacando es el 102 si ese campo pertenece a la columna empresas_descuentos.id. no está claro el origen del dato, pero para el caso el problema es el funcionamiento del GROUP BY en MySQL:
Como MySQL admite usar GROUP BY sin necesidad de indicar todos los campos no afectados por funciones agregfadas (MAX() en este caso), la pregunta es qué pasa con los otros vampos no usados en él.
Simple: Devuelve el primer valor que encuentre, en el primer registro devuelto para las cindciones dadas.
Eso significa que si ese 102 pertenece a un campo distinto del afectado por el MAX(), es correcto que devuelva eso. Lo que estaría mal en todo caso sería la construcción de la tabla, ya que no deberías incluir campos que puedan tener valores diferenciales entre distintos registros.
¿Se entiende la idea?
Básicamente, mira qué pasa cuando haces esto:
Código MySQL:
Ver original
  1. SELECT MAX(ed.id)  id_empresas_descuentos,
  2.          ed.id_empresas,
  3.          ed.perfil,
  4.          e.id  id_descuento,
  5.          e.id_empresas,
  6.          e.activo,
  7.          e.descuento,
  8.          e.limitaciones,
  9.          e.fecha_desde,
  10.          e.fecha_hasta,
  11.          m.id,
  12.          m.nombre,
  13.          m.id_categorias,
  14.          m.nombre_pc,
  15.          m.apellido1_pc,
  16.          m.email,
  17.          m.telefono,
  18.          m.cif,
  19.          em.id  id_empresas,
  20.          em.id_mis_datos,
  21.          p.id_empresas
  22.     FROM misdatos m
  23.          INNER JOIN empresas em ON em.id_mis_datos = m.id
  24.          INNER JOIN empresas_direcciones ed ON ed.id_empresas = em.id
  25.          INNER JOIN empresas_descuentos e ON e.id_empresas = ed.id_empresas
  26.          INNER JOIN pagos p ON  p.id_empresas = em.id
  27.         e.activo = 1
  28.         -- AND e.fecha_hasta >= "2013-11-06"
  29. GROUP BY ed.id_empresas,
  30.          ed.perfil,
  31.          e.id  id_descuento,
  32.          e.id_empresas,
  33.          e.activo,
  34.          e.descuento,
  35.          e.limitaciones,
  36.          e.fecha_desde,
  37.          e.fecha_hasta,
  38.          m.id,
  39.          m.nombre,
  40.          m.id_categorias,
  41.          m.nombre_pc,
  42.          m.apellido1_pc,
  43.          m.email,
  44.          m.telefono,
  45.          m.cif,
  46.          em.id  id_empresas,
  47.          em.id_mis_datos,
  48.          p.id_empresas;
Si devuelve más de un registro por cada ed.id_empresas, entonces lo que tienes es mal construida la consulta, como te digo, y deberás rediseñarla para hacerla en partes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)