テーブルで繰り返されている値がいくつかあります。最新/最高の日付を持つ値のみを選択したいと思います。
ID Type Name Value Date
-- ------- ----- ------- -------------
1 "FRUIT" "Apple" "Imported" "2011-03-19 22:08:13"
5 "FRUIT" "LEMON" "Imported" "2011-03-19 22:00:44"
22 "FRUIT" "Peach" "Imported" "2011-03-20 11:03:13"
31 "FRUIT" "MELON" "Imported" "2011-04-28 18:42:07"
44 "FRUIT" "Peach" "Imported" "2011-04-12 11:06:11"
98 "FRUIT" "CHERRY" "Imported" "2011-03-19 22:46:04"
211 "FRUIT" "MELON" "Imported" "2011-03-19 22:25:24"
217 "VEG" "SPINACH""Imported" "2011-03-19 22:25:24"
これらを選択したい:
ID Type Name Value Date
-- ------- ----- ------- -------------
1 "FRUIT" "Apple" "Imported" "2011-03-19 22:08:13"
5 "FRUIT" "LEMON" "Imported" "2011-03-19 22:00:44"
31 "FRUIT" "MELON" "Imported" "2011-04-28 18:42:07"
44 "FRUIT" "Peach" "Imported" "2011-04-12 11:06:11"
98 "FRUIT" "CHERRY" "Imported" "2011-03-19 22:46:04"
これは必要なものの簡略版です。テーブルには約20列あるので、*を選択します。そうでない場合は、1つずつ選択できます。
したがって、Type FRUITの*行を選択したいのですが、日付が最も高い行のみを選択します。ありがとうございました
これはあなたが望むものを与えるはずです:
_SELECT *
FROM Table
INNER JOIN
(SELECT Name, MAX(Date) as TopDate
FROM Table
WHERE Type = 'FRUIT'
GROUP BY Name) AS EachItem ON
EachItem.TopDate = Table.Date
AND EachItem.Name = Table.Name
_
基本的には、果物の種類ごとに最新の日付を見つけて、各果物に行の情報(日付と果物の名前で結合)を表示します。 [日付]フィールドと[名前]フィールドの両方にインデックスが付けられていることを確認してください。
IDが最も高いアイテムが日付も最も高いアイテムであると想定できる場合(通常は、すべての場合に当てはまるとは限りません。ユースケースによって異なります)、代わりにMAX(ID)
を実行できます。 MAX(Date)
そして、日付と名前でリンクする代わりに、そのIDでリンクするだけを利用します。
Mysqlを使用している場合、これはSELECTにすべてのタイプの「フルーツ」を並べ替え、日付を古いものから新しいものの順に並べます。
SELECT * FROM tablename WHERE Type='fruit' ORDER by Date ASC
必要に応じて制限を設けることもできます(これは最も古い5つに制限されます)。
SELECT * FROM tablename WHERE Type='fruit' ORDER by Date ASC LIMIT 5