1

私のテーブル(製品)は次のようになります。

id name value
1  oil  100
2  oil  140
3  glue 120
4  glue 110

最後に挿入されたoilと最後に挿入されたglueを選択する必要があるため、結果は次のようになります。

2 oil 140
4 glue 110

何を試しましたか:

SELECT * FROM `products` GROUP BY `name` ORDER BY `value` DESC LIMIT 2

しかし、このクエリは

1  oil  100
3  glue 120
4

4 に答える 4

2

各タイプ (最大 ID) の最後に挿入された行を取得し、それらの ID のデータを取得する必要があります。これは、新しい挿入ごとに ID 番号が上がることを前提としているため、より高い ID 値は後で挿入されることを前提としています。

 SELECT d.id, d.name, d.value
   FROM products d
   JOIN (
     SELECT MAX(id) id, name
       FROM products
      GROUP BY name
   ) m ON (d.id = m.id) 
于 2012-09-11T12:02:35.337 に答える
1

これを試して:-

SELECT * FROM `products` GROUP BY `name` ORDER BY id DESC LIMIT 2
于 2012-09-11T12:01:08.010 に答える
1

このクエリはうまくいくはずです:

SELECT a.*
FROM products a
     INNER JOIN (SELECT MAX(id) AS id
                 FROM products
                 GROUP BY name
                ) b
                ON a.id = b.id;
于 2012-09-11T12:02:26.333 に答える
1

テーブルで自己結合を実行する必要があります。

SELECT p1.id, p1.name, p1.value
FROM products p1
inner join 
(
   select name, max(id) mxid
   from products
   group by id
) p2
   on p1.name = p2.name
   and p1.id = p2.mxid

内部サブクエリはmax()レコードの ID を取得し、それをテーブルに結合して、必要なレコードを返します。

于 2012-09-11T12:04:04.010 に答える