En una base de datos simple de administración de existencias, se agrega y envía cantidad de existencias nuevas hasta que la cantidad llegue a cero. A cada movimiento de stock se le asigna una referencia, solo se utiliza la última referencia.¿Se correlaciona GROUP BY y LEFT JOIN en múltiples criterios para mostrar el último registro?
En el ejemplo proporcionado, nunca se muestran las últimas referencias, la ID de la acción 1,4 debe tener referencias charlie, foxtrot respectivamente, pero en su lugar muestra alfa, delta.
¿Cómo se puede correlacionar un GROUP BY y LEFT JOIN en múltiples criterios para mostrar el último registro?
http://sqlfiddle.com/#!2/6bf37/107
CREATE TABLE stock (
id tinyint PRIMARY KEY,
quantity int,
parent_id tinyint
);
CREATE TABLE stock_reference (
id tinyint PRIMARY KEY,
stock_id tinyint,
stock_reference_type_id tinyint,
reference varchar(50)
);
CREATE TABLE stock_reference_type (
id tinyint PRIMARY KEY,
name varchar(50)
);
INSERT INTO stock VALUES
(1, 10, 1),
(2, -5, 1),
(3, -5, 1),
(4, 20, 4),
(5, -10, 4),
(6, -5, 4);
INSERT INTO stock_reference VALUES
(1, 1, 1, 'Alpha'),
(2, 2, 1, 'Beta'),
(3, 3, 1, 'Charlie'),
(4, 4, 1, 'Delta'),
(5, 5, 1, 'Echo'),
(6, 6, 1, 'Foxtrot');
INSERT INTO stock_reference_type VALUES
(1, 'Customer Reference');
SELECT stock.id, SUM(stock.quantity) as quantity, customer.reference
FROM stock
LEFT JOIN stock_reference AS customer ON stock.id = customer.stock_id AND stock_reference_type_id = 1
GROUP BY stock.parent_id
se me adelantó. http://sqlfiddle.com/#!2/4edd4/1 – Kermit