1

私はこれに似たデータセットを持っています:

id   product_id   size       color     price   created_date
------------------------------------------------------------------
1    24           small      black     9.99    2012-06-21 00:00:00
2    24           small      red       9.99    2012-06-23 00:00:00
3    24           medium     black     11.99   2012-06-24 00:00:00
4    24           medium     red       11.99   2012-06-24 00:00:00
5    24           large      black     12.99   2012-06-25 00:00:00
6    24           large      red       12.99   2012-06-26 00:00:00
7    24           small      black     8.99    2012-06-27 00:00:00
8    24           medium     black     10.99   2012-06-29 00:00:00
9    24           large      red       13.99   2012-06-30 00:00:00
10   24           medium     red       10.99   2012-07-01 00:00:00

私の意図する結果セットは次のようになります。

id   product_id   size       color     price   created_date
------------------------------------------------------------------
2    24           small      red       9.99    2012-06-23 00:00:00
5    24           large      black     12.99   2012-06-25 00:00:00
7    24           small      black     8.99    2012-06-27 00:00:00
8    24           medium     black     10.99   2012-06-29 00:00:00
9    24           large      red       13.99   2012-06-30 00:00:00
10   24           medium     red       10.99   2012-07-01 00:00:00

つまり、product_id = 24でサイズ/色が一意であるテーブルからすべてを選択し、created_dateまでに最新のエントリのみを返します。

これに取り組む最善の方法がわかりません。一時テーブルを介して副選択しますか?内側に参加しますか?ある種のユニークで独特なコンボ?私はおそらくこれを必要以上に難しくしているでしょう。

4

1 に答える 1

2

グループごとの最大値を取得する必要があります。

SELECT   mytable.*
FROM     mytable NATURAL JOIN (
  SELECT   size, color, MAX(created_date) AS created_date
  FROM     mytable
  GROUP BY size, color
) AS t

sqlfiddleでそれを参照してください。

于 2012-06-29T21:55:21.893 に答える