簡體   English   中英

SELECT查詢從每個組返回1行

[英]SELECT query return 1 row from each group

這是一個產品表,擁有數百萬條記錄。

在此輸入圖像描述

我想列出如下記錄:
通常我使用:

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


目前有SQL性能問題。 我需要SQL查詢來輸出這樣的結果。

在此輸入圖像描述

有很多替代方法可以解決這個問題,我建議加入一個子查詢,該子查詢分別為每個store_ID獲取最新的ID假設 store_ID AUTO_INCREMENT ed )。

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;
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
;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM