SELECT查询从每个组返回1行

Vil*_*Raj 9 mysql sql select greatest-n-per-group

这是一个产品表,有几百万条记录.

在此输入图像描述

我想列出如下记录:
通常我使用:

SELECT id, 
       product_name, 
       store_id 
FROM product
GROUP BY store_id 
ORDER BY id.
Run Code Online (Sandbox Code Playgroud)


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

在此输入图像描述

Joh*_*Woo 21

有很多替代方法可以解决这个问题,我建议加入一个子查询,该子查询分别为每个子查询获取最新的ID(假设AUTO_INCREMENT列为ed)store_ID.

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
Run Code Online (Sandbox Code Playgroud)

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

更新1

如果你想对每条记录都有限制,请使用以下内容,

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;
Run Code Online (Sandbox Code Playgroud)