これは商品表であり、数百万のレコードがあります。
SELECTクエリは各グループから1行を返します
私は以下のようにレコードを一覧表示したい:通常、私が使用し
:現在のSQLパフォーマンスの問題を持つ
SELECT id,
product_name,
store_id
FROM product
GROUP BY store_id
ORDER BY id.
を。このような結果を出力するにはSQLクエリが必要です。
これは商品表であり、数百万のレコードがあります。
SELECTクエリは各グループから1行を返します
私は以下のようにレコードを一覧表示したい:通常、私が使用し
:現在のSQLパフォーマンスの問題を持つ
SELECT id,
product_name,
store_id
FROM product
GROUP BY store_id
ORDER BY id.
を。このような結果を出力するにはSQLクエリが必要です。
これを解決するには多くの選択肢がありますが、私はお勧め1は、各store_ID
について(カラムはAUTO_INCREMENT
編であると仮定し)別に最新ID
を取得するサブクエリに参加していることです。 ID
とstore_id
:SQLFiddle Demo
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
パフォーマンスを向上させるため、これらの列にインデックスを持つようにしてください。 あなたはすべてのレコードの制限を持っているしたい場合はUPDATE 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;
良いです。その仕事!各store_idから2レコードを制限できますか? –
しかしID DESCを並べ替えることはできますか? –
確かに、このリンクを見てください。http://www.sqlfiddle.com/#!2/ba920/12 –
これをしてくださいしてみてください。
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
;
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のどちらかであなたのreqに従って注文することができます。
@ J-W:これは構文とは別に、受け入れられた答えとどう違うのですか?どちらの場合も結果は正しいと思われます。 – Priednis
WHYクエリが非常に遅いのを見るために、テーブル構造とexplain文の出力を質問の一部として投稿してください。テーブル定義にインデックスを含めるようにしてください。 – Namphibian
「製品から」クエリのテーブル名が記載されています –