Geo*_*rge 13 mysql select join distinct
我有两个mysql表 - 一个销售表:
+----------------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------------------+------+-----+---------+-------+
| StoreId | bigint(20) unsigned | NO | PRI | NULL | |
| ItemId | bigint(20) unsigned | NO | | NULL | |
| SaleWeek | int(10) unsigned | NO | PRI | NULL | |
+----------------+------------------------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)
和一个项目表:
+--------------------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+------------------------------+------+-----+---------+-------+
| ItemId | bigint(20) unsigned | NO | PRI | NULL | |
| ItemName | varchar(100) | NO | | NULL | |
+--------------------+------------------------------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)
sales表包含每个ItemID的多个记录- 每个SaleWeek一个记录.我想通过加入两个表来选择所有出售的商品,如下所示:
SELECT items.ItemName, items.ItemId FROM items
JOIN sales ON items.ItemId = sales.ItemId
WHERE sales.StoreID = ? ORDER BY sales.SaleWeek DESC;
Run Code Online (Sandbox Code Playgroud)
但是,这将根据每个SaleWeek的多个条目返回多个ItemId值.我可以做一个明确的选择只返回一个ItemID - 我不想要查询最新的SaleWeek,因为有些项目可能没有最新的SaleWeek的条目所以我需要得到最后的销售.我是否需要指定DISTINCT或使用LEFT OUTER JOIN或其他东西?
Kal*_*see 22
A DISTINCT
应该做你想要的:
SELECT DISTINCT items.ItemName, items.ItemId FROM items
JOIN sales ON items.ItemId = sales.ItemId
WHERE sales.StoreID = ? ORDER BY sales.SaleWeek DESC;
Run Code Online (Sandbox Code Playgroud)
这将只返回不同的items.ItemName, items.ItemId
元组.
你也有关于销售周的评论.想要最近一周,您可能想尝试使用GROUP BY
SELECT
items.ItemName,
items.ItemId,
max( Sales.SaleWeek ) MostRecentSaleWeek
FROM
items JOIN sales ON items.ItemId = sales.ItemId
WHERE
sales.StoreID = ?
GROUP BY
items.ItemID,
items.ItemName
ORDER BY
MostRecentSaleWeek, -- ordinal column number 3 via the MAX() call
items.ItemName
Run Code Online (Sandbox Code Playgroud)
您可能必须通过更改顺序为序第3列引用如果你因此基于该列想要..这个查询将给你每个不同的项目,最近一周内它被出售.