Buenas noches ElHacker.net hace años que no ando por aqui, esta vez les vengo a fastidiar con un problema que tengo en MySQL
Tengo las tablas: producto, categorias, marcaproducto, ingreso_producto y tienen aproximadamente el siguiente contenido:
PRODUCTO:
id | codigo | descripcion | foto | nombre_marca | stock |
1 | 123456789 | PLC Modicon | null | 1 | 6 |
2 | 444444444 | HMI Magelis | null | 1 | 3 |
CATEGORIAS:
ID | Categorias |
1 | Automatizacion |
marcaproducto:
id | nombre_marca |
1 | Schneider Electric |
proveedores:
id | nombre_proveedor |
1 | ChijauKay Electric |
ingreso_producto:
id | id_producto | cantidad | id_proveedor | precio_compra | fecha |
1 | 1 | 3 | 1 | 100 | 2017-09-26 16:33:36 |
2 | 1 | 3 | 1 | 98 | 2017-09-26 16:34:08 |
3 | 2 | 2 | 1 | 50 | 2017-09-26 17:04:20 |
Estoy haciendo la siguiente consulta:
SELECT P.id, P.codigo, P.descripcion, MP.nombre_marca, P.foto, IP.precio_compra, P.precio_venta, P.stock, C.descripcion AS DesCategoria, Pro.nombre_proveedor, IP.fecha
FROM producto AS P
INNER JOIN categorias AS C ON P.id_categoria = C.id
INNER JOIN marcaproducto AS MP on P.id_marcaproducto = MP.id
INNER JOIN proveedores AS Pro ON P.id_proveedor = Pro.id
INNER JOIN ingreso_producto AS IP ON P.id = IP.id_producto
order by fecha asc
y tengo como respuesta lo siguiente:
id | codigo | descripcion | nombre_marca | foto | precio_compra | precio_venta | stock | DesCategoria | nombre_proveedor | fecha
1 | 123456789 | PLC Modicon | Schneider Electric | NULL | 100.00 | 0.00 | 0 | Automatizacion | ChijauKay Electric | 2017-09-26 16:33:36
1 | 123456789 | PLC Modicon | Schneider Electric | NULL | 170.00 | 0.00 | 0 | Automatizacion | ChijauKay Electric | 2017-09-26 16:34:08
2 | 444444444 | HMI Magelis | Schneider Electric | NULL | 98.00 | 0.00 | 0 | Automatizacion | ChijauKay Electric | 2017-09-26 16:54:38
Como podran ver los IDs se estan repitiendo, he probado con muchas formas que he encontrado en google pero no me funciona ninguno :( ¿En que estoy mal?
Quiero que solo muestre del que tenga la mayor fecha del ID que se repite. osea mas o menos asi:
id | codigo | descripcion | nombre_marca | foto | precio_compra | precio_venta | stock | DesCategoria | nombre_proveedor | fecha
1 | 123456789 | PLC Modicon | Schneider Electric | NULL | 170.00 | 0.00 | 0 | Automatizacion | ChijauKay Electric | 2017-09-26 16:34:08
2 | 444444444 | HMI Magelis | Schneider Electric | NULL | 98.00 | 0.00 | 0 | Automatizacion | ChijauKay Electric | 2017-09-26 16:54:38
Le dare mis tremendas gracias a quien se tome la molestia de leer este post y muchas gracias :(
Lo que estas haciendo mal es que en ningun lado colocas que quieres el maximo, no he probado el query pero mas o menos debe funcionar.
select t.id,
t.codigo,
t.descripcion,
t.nombre_marca,
t.foto,
t.precio_compra,
t.precio_venta,
t.stock,
t.DesCategoria,
t.nombre_proveedor
FROM
(
SELECT P.id,
P.codigo,
P.descripcion,
MP.nombre_marca,
P.foto,
P.precio_venta,
P.stock,
C.descripcion AS DesCategoria,
Pro.nombre_proveedor,
PI.precio_compra,
PI.fecha
FROM producto AS P
INNER JOIN categorias AS C ON P.id_categoria = C.id
INNER JOIN marcaproducto AS MP ON P.id_marcaproducto = MP.id
INNER JOIN proveedores AS Pro ON P.id_proveedor = Pro.id
) t INNER JOIN (
SELECT id_producto,
precio_compra,
fecha
FROM ingreso_producto inner join (
SELECT
id_producto,
max(IP.fecha) as fecha
FROM ingreso_producto
GROUP BY id_producto
) set_max_fecha
ON ingreso_producto.id_producto = set_max_fecha.id_producto
AND ingreso_producto.fecha = set_max_fecha.fecha
) PI
ON P.id = PI.id_producto
ORDER BY fecha ASC
Gracias por la respuesta Toxico! Aqui ya son las 01:36 y por ahora sin acceso a mi PC, maniana lo probare a detalle, pero metiendo esa consulta a la base de datos por mi celular, tengo el siguiente resultado:
MySQL ha dicho: Documentación
#1054 - La columna 'PI.precio_compra' en field list es desconocida
Gracias por darte el tiempo de ayudarme :D
Razon llevas, prueba con esto.
select t.id,
t.codigo,
t.descripcion,
t.nombre_marca,
t.foto,
t.precio_compra,
t.precio_venta,
t.stock,
t.DesCategoria,
t.nombre_proveedor,
PI.precio_compra,
PI.fecha
FROM
(
SELECT P.id,
P.codigo,
P.descripcion,
MP.nombre_marca,
P.foto,
P.precio_venta,
P.stock,
C.descripcion AS DesCategoria,
Pro.nombre_proveedor
FROM producto AS P
INNER JOIN categorias AS C ON P.id_categoria = C.id
INNER JOIN marcaproducto AS MP ON P.id_marcaproducto = MP.id
INNER JOIN proveedores AS Pro ON P.id_proveedor = Pro.id
) t INNER JOIN (
SELECT id_producto,
precio_compra,
fecha
FROM ingreso_producto inner join (
SELECT
id_producto,
max(IP.fecha) as fecha
FROM ingreso_producto
GROUP BY id_producto
) set_max_fecha
ON ingreso_producto.id_producto = set_max_fecha.id_producto
AND ingreso_producto.fecha = set_max_fecha.fecha
) PI
ON P.id = PI.id_producto
ORDER BY fecha ASC