Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

consulta complicada - max

Estas en el tema de consulta complicada - max en el foro de Bases de Datos General en Foros del Web. Hola! estoy teniendo problemas con una consulta, espero que alguien pueda ayudarme: tengo dos tablas, una 'personas' (con los campos codigo y nombre) y otra ...
  #1 (permalink)  
Antiguo 23/04/2010, 13:43
 
Fecha de Ingreso: febrero-2009
Ubicación: Buenos Aires
Mensajes: 42
Antigüedad: 15 años, 3 meses
Puntos: 0
consulta complicada - max

Hola! estoy teniendo problemas con una consulta, espero que alguien pueda ayudarme:

tengo dos tablas, una 'personas' (con los campos codigo y nombre) y otra 'actividades' (que tiene los campos 'codigo', 'persona', que es el codigo de la tabla anterior y 'observaciones').

Ej:

cod persona
1 Adrian
2 Coco
3 Felipe

cod. persona observaciones
1 1 jugó
2 1 charló
3 1 comió
4 2 comió
5 2 hizo deporte
6 3 hizo la tarea
....


Lo que querría es una consulta que me devuelva: el nombre de la persona y la observación correspondiente al código máximo de la segunda tabla, o sea:

adrian comió
coco hizo deporte
felipe hizo la tarea


¿es posible hacer algo así?

Gracias
  #2 (permalink)  
Antiguo 23/04/2010, 14:23
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
De acuerdo Respuesta: consulta complicada - max

Saludos..

De esta forma pienso te podria servir

Código MySQL:
Ver original
  1. SELECT o.persona,p.persona,o.observaciones
  2. FROM persona p INNER JOIN observaciones o
  3. ON p.cod=o.persona
  4. WHERE o.cod IN (SELECT MAX(cod) FROM observaciones  
  5. GROUP BY persona
  6. ORDER BY CONCAT (cod,'',persona) ASC)

Pruebalo y cualquier novedad lo comentas..


Hasta Pronto
__________________
:.:Nano.:: @nano_hard - Retornando al foro

Última edición por Nano_; 23/04/2010 a las 14:29
  #3 (permalink)  
Antiguo 23/04/2010, 14:32
 
Fecha de Ingreso: febrero-2009
Ubicación: Buenos Aires
Mensajes: 42
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: consulta complicada - max

gracias! perfecto, sólo que se me agrega una complicación

Los nombres que no tienen actividades también deberían aparecer... ... no se cómo manejar eso
  #4 (permalink)  
Antiguo 23/04/2010, 14:35
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: consulta complicada - max

Código SQL:
Ver original
  1. SELECT
  2. p.persona,
  3. max_observaciones.observaciones
  4. FROM persona p
  5. INNER JOIN
  6. (SELECT persona,observaciones,MAX(cod) FROM observaciones GROUP BY persona) max_observaciones
  7. ON p.cod=max_observaciones.persona

Creo que esta forma es mas eficiente. Sin embargo, creo que con la respuesta que te da nano también lo puedes lograr.

No he probado nada
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 23/04/2010, 14:39
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: consulta complicada - max

Cita:
Iniciado por Lauferin Ver Mensaje
gracias! perfecto, sólo que se me agrega una complicación

Los nombres que no tienen actividades también deberían aparecer... ... no se cómo manejar eso
mmmm tocaria quitar que la union de tablas sea restrictiva...

Código MySQL:
Ver original
  1. SELECT p.cod,p.persona,o.observaciones FROM persona p LEFT OUTER JOIN observaciones o
  2. ON p.cod=o.persona AND o.cod IN (SELECT MAX(cod) FROM observaciones  
  3. GROUP BY persona
  4. ORDER BY CONCAT (cod,'',persona) ASC)
__________________
:.:Nano.:: @nano_hard - Retornando al foro

Última edición por Nano_; 23/04/2010 a las 15:01
  #6 (permalink)  
Antiguo 24/04/2010, 18:08
 
Fecha de Ingreso: febrero-2009
Ubicación: Buenos Aires
Mensajes: 42
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: consulta complicada - max

excelente, gracias a ambos!!

Etiquetas: max
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:01.