SoloCodigo

Bases de Datos => MySQL => Mensaje iniciado por: Altareum en Domingo 8 de Octubre de 2006, 23:17

Título: Cómo Controlar El Group By ??
Publicado por: Altareum en Domingo 8 de Octubre de 2006, 23:17
Buenas.....

Bueno, haciendo un trabajo se me ha presentado un problema con el GROUP BY, y es como obtener el último dato ingresado (o el de mayor valor) de entre los agrupados.
Para ser más claro, supongamos que tengo las siguientes tablas:

Analisis:
Citar
id | id_producto | Cantidad | Vencimiento
1  | 1                | 10          | 12/2005
2  | 1                | 2            | 05/2006
3  | 2                | 55          | 06/2006
4  | 1                | 10          | 08/2006
5  | 2                | 12          | 08/2006

Productos:
Citar
id | Código
1  | AB1
2  | ZD2


La consulta que debo efectuar es:
Citar
SELECT *
FROM Productos
INNER JOIN Analisis ON Productos.id = Analisis.id_producto
WHERE Vencimiento < CURDATE()
GROUP BY Productos.id


El problema está en que necesito sacar el último vencimiento registrado de un análisis y en lo posible en una sola consulta, pero MySql me devuelve el primer registro que encuentra. Intenté com MAX para el id del anásis, ya que en teoría el vencimiento del último registro ingresado es superior al resto.
El problema es que necesito todos los datos, no solo el vencimiento, sino que el id y la cantidad. Y no puedo usar subquerys, ya que la version de mysql no me lo permite.  :(

Alquien sabe como hacerlo ??? tenía entendido que con MAX, pero no me sirve...

Desde ya les agradezco.
Altareum.
Título: Re: Cómo Controlar El Group By ??
Publicado por: F_Tanori en Domingo 8 de Octubre de 2006, 23:55
Hola Altareum

Que te parece esta consulta....

Citar

Select p.*,max(vencimiento) FROM productos p,analisis a
WHERE p.id=a.id_producto GROUP BY p.id ORDER by p.id,vencimiento desc


o asi

Citar

Select p.*,max(vencimiento) FROM productos p,analisis a
WHERE p.id=a.id_producto and vencimiento<curdate() GROUP BY p.id ORDER by p.id,vencimiento desc

que es lo mismo :P


Suerte!
Título: Re: Cómo Controlar El Group By ??
Publicado por: Altareum en Lunes 9 de Octubre de 2006, 00:11
Gracias F_Tanori....

Pero la verdad es que estoy en lo mismo.... ya que necesito todos los datos del analisis correspondiente al ultimo vencimiento, no solo la fecha... E ahí donde está mi problema, si ejecuto la consulta que me pasaste, me devuelve esto:

id | Codigo | id | id_producto | Cantidad | Vencimiento | max(vencimiento)
1  | AB1     | 1  | 1                | 10          | 12/2005       | 08/2006

Y como verás la cantidad corresponde al primer registro y no al del último vencimiento...  :(

Altareum.
Título: Re: Cómo Controlar El Group By ??
Publicado por: F_Tanori en Lunes 9 de Octubre de 2006, 09:59
que version estas utilizando?


tampoco admite vistas?
Título: Re: Cómo Controlar El Group By ??
Publicado por: Altareum en Miércoles 11 de Octubre de 2006, 16:29
La versión es la 4.0 y algo....No, no admite vistas, Mysql incorporó las vistas en la versión 5 recién.
Lamentablemente el servidor donde tengo que hacerlo tiene esta versión y no puedo cambiarlo (ya que es un servidor pago).... Ya lo solucioné, pero con php y haciendo 2 consultas (lo cual no me gusta para nada).....

Pero aún sigo tienendo la duda... se puede ????

Altareum.