10

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

在此处输入图像描述

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

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


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

在此处输入图像描述

4

3 回答 3

22

有很多替代方法可以解决这个问题,我推荐的一种方法是加入一个子查询,该子查询分别获取每个的最新ID假设该列是AUTO_INCREMENTedstore_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

为了获得更好的性能,请确保在这些列上有一个索引: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;
于 2013-01-17T08:45:01.720 回答
2
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 进行订购。

于 2013-01-17T08:54:00.420 回答
1

请试试这个:

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
;
于 2013-01-17T08:47:50.080 回答