为每个组选择具有最高值的整个记录

时间:2017-07-24 14:31:03

标签: mysql group-by max distinct

我的CMS将包含过去版本的网页存储在同一个表格中。我想通过productID提取每条记录的最新版本。为:

productID version name text  price etc etc
ABC123       1.2  Fred Stuff 2.34  ... ...
DEF456       0.3  Jill Other 1.99  ... ...
ABC123       1.3  Fred Stuff 2.99  ... ...
DEF456       0.4  Jill Other 2.50  ... ...
ABC123       1.4  Fred Stuff 3.45  ... ...

我需要得到:

ABC123       1.4  Fred Stuff 3.45  ... ...
DEF456       0.4  Jill Other 2.50  ... ...

(任何订单)。我已尝试过各种变体

select distinct(version),* group by productID,max(version) from table;

但我无法弄清楚如何做到这一点。其他答案选择最高'都是关于计数和总和的;我只需要完整的记录。

1 个答案:

答案 0 :(得分:2)

Cross Apply会很好用,除了这是mySQL ......所以

您需要生成一组数据,其中包含表格的逻辑键和您感兴趣的最大值。然后加入回到基本集。

因此SELECT max(version) mv, productID from table group by productID为每个productID获取最大版本,然后我们可以将其连接回基本集以获取所需的其他数据。

SELECT *
FROM Table A
INNER JOIN (SELECT max(version) mv, productID 
            FROM table 
            GROUP BY productID) B
 on A.ProductID= B.ProductID
and A.Version = B.MV