Pub*_*ius 5 mysql greatest-n-per-group
如您所见,我想获取每个 SKU 的最新采购订单。
我有这个数据集,
CREATE TABLE PurchaseOrders (
id int PRIMARY KEY AUTO_INCREMENT,
sku varchar(6),
purchase_date date
);
INSERT INTO PurchaseOrders VALUES
( 1, 'ABC123', '2017-12-23' ),
( 2, 'ABC123', '2016-11-11' ),
( 3, 'DEF456', '2011-01-03' ),
( 4, 'DEF456', '2011-10-21' ),
( 5, 'GHI789', '2017-01-23' ),
( 6, 'GHI789', '2017-11-21' );
Run Code Online (Sandbox Code Playgroud)
1 | ABC123 | 2017-12-23
4 | DEF456 | 2011-10-21
6 | GHI789 | 2017-11-21
Run Code Online (Sandbox Code Playgroud)
对派生表进行连接可能最容易:
select a.*
from PurchaseOrders as a
join (
select sku, max(date) as date
from PurchaseOrders
group by sku
) as b
on a.sku = b.sku
and a.date = b.date;
Run Code Online (Sandbox Code Playgroud)
派生表 b 包含每个 sku 的最大 dt。为了获得 id,我们将其与原始表相结合。
正如 Evan Carroll 指出的,您可以将其缩短一点,因为左操作数和右操作数的连接属性名称相同:
select a.*
from PurchaseOrders as a
join (
select sku, max(date) as date
from PurchaseOrders
group by sku
) as b
using (sku, date);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
180 次 |
最近记录: |