10

これは製品テーブルであり、数百万のレコードがあります。

ここに画像の説明を入力してください

以下のようにレコードをリストしたい:
通常私は使用します:

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


現在SQLパフォーマンスの問題があります。このような結果を出力するにはSQLクエリが必要です。

ここに画像の説明を入力してください

4

3 に答える 3

22

これを解決する方法はたくさんありますが、私が推奨する方法の 1 つは、それぞれの最新情報をID(列がedであると仮定して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;
于 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

これは機能するはずであり、req に従って 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 に答える