Ayuda con Inner Join e IDs repetidos - MySQL

Iniciado por [Decoded], 27 Septiembre 2017, 01:11 AM

0 Miembros y 1 Visitante están viendo este tema.

[Decoded]

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:

 
   


idcodigodescripcionfotonombre_marcastock
1123456789PLC Modicon    null16
2444444444HMI Magelis    null13

CATEGORIAS:

IDCategorias
1Automatizacion

marcaproducto:

idnombre_marca
1Schneider Electric

proveedores:

idnombre_proveedor
1ChijauKay Electric

ingreso_producto:

idid_productocantidadid_proveedorprecio_comprafecha
11311002017-09-26 16:33:36
2131982017-09-26 16:34:08
3221502017-09-26 17:04:20

Estoy haciendo la siguiente consulta:

Código (sql) [Seleccionar]
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  :(

Toxico

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.

Código (sql) [Seleccionar]


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



solo el principio....


[Decoded]

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


Toxico

Razon llevas, prueba con esto.

Código (sql) [Seleccionar]

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


solo el principio....