SELECT查询从每个组返回1行

这是一个产品表,有几百万条logging。

在这里输入图像描述

我想列出如下logging:
通常我使用:

SELECT id, product_name, store_id FROM product GROUP BY store_id ORDER BY id. 

目前有SQL性能问题。 我需要SQL查询来输出这样的结果。

在这里输入图像描述

有很多解决办法可以解决这个问题,我build议join一个子查询,它为每个store_ID分别获取最新的ID假定列是AUTO_INCREMENT )。

 SELECT a.* FROM tableName a INNER JOIN ( SELECT store_ID, MAX(ID) max_ID FROM tableName GROUP BY store_ID ) b ON a.store_ID = b.store_ID AND a.ID = b.max_ID 
  • SQLFiddle演示

为了获得更好的性能,请确保在这些列上有一个索引: IDstore_id

更新1

如果你想限制每个logging,使用下面的这个,

 SELECT ID, product_Name, store_ID FROM tableName a WHERE ( SELECT COUNT(*) FROM tableName b WHERE b.store_ID = a.store_ID AND b.ID >= a.ID ) <= 2; 
  • SQLFiddle演示
 SELECT store_id,id,product_name FROM table_name WHERE id IN (SELECT MAX(id) FROM table_name GROUP BY store_id) ORDER BY id 

这应该工作,你可以根据你的要求由store_id或id。

试试这个请:

 SELECT * FROM YOURTABLE B JOIN (SELECT MAX(ID) MX FROM YOURTABLE GROUP BY STORE_ID) A ON A.STORE_ID = B.STORE_ID AND B.ID = A.MX GROUP BY B.STORE_ID ;