5

単純な在庫管理データベースでは、新しい在庫の数量が追加され、数量がゼロになるまで出荷されます。各在庫移動には参照が割り当てられ、最新の参照のみが使用されます。

提供されている例では、最新の参照は表示されません。株式 ID の 1、4 にはそれぞれ参照 charlie、foxtrot が必要ですが、代わりに alpha、delta が表示されます。

複数の条件で GROUP BY と LEFT JOIN を関連付けて最新のレコードを表示するにはどうすればよいですか?

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
4

1 に答える 1

1

サブクエリを使用して、各株式グループの最新の ID を取得できます。

SELECT g.parent_id, g.quantity, customer.reference
FROM (
    SELECT parent_id, SUM(stock.quantity) as quantity, MAX(id) as LatestID
    FROM stock
    GROUP BY parent_id
) g LEFT JOIN stock_reference AS custome
    ON g.LatestID = customer.stock_id AND stock_reference_type_id = 1
于 2012-09-10T16:02:41.287 に答える