SoloCodigo
Bases de Datos => MySQL => Mensaje iniciado 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:
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:
id | Código
1 | AB1
2 | ZD2
La consulta que debo efectuar es:
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.
-
Hola Altareum
Que te parece esta consulta....
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
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!
-
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.
-
que version estas utilizando?
tampoco admite vistas?
-
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.