这是一张产品表,有几百万条记录。
我想列出如下记录:
通常我使用:
SELECT id,
product_name,
store_id
FROM product
GROUP BY store_id
ORDER BY id.
目前存在SQL性能问题。我需要SQL查询来输出这样的结果。
答案 0 :(得分:21)
有很多替代方法可以解决这个问题,我建议加入一个子查询,分别获取最新的ID
(假设该列为AUTO_INCREMENT
)每个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
为了获得更好的效果,请务必在这些列上添加索引:ID
和store_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;
答案 1 :(得分: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排序。
答案 2 :(得分: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
;