同じ古い質問:
私はテーブルを持っています。フィールドのセットでグループ化された、フィールドの最大値を持つ行が必要です。しかし、最大値とフィールドごとのグループだけは必要ありません。行全体が必要です(他のすべてのフィールドなので、次のことはできません:
select max(field1), field2 from table group by field2;
先ほど言ったように、field3、field4、...、fieldn が必要です。
これは以前に扱われたことがあり、ここで優れた答えを見つけました:
基本的に、そこからすべてのフィールドを取得して元のテーブルと、最大値とグループ化フィールドを取得するサブクエリの間で結合を行う必要があると書かれています。そして、ほとんどの場合、それはおそらく機能します。
私の問題
私の特定のケースでは、データ型が関係しているため、そのアプローチが機能するかどうかはわかりません。例を挙げましょう。
これにより、必要なフィールドごとにグループ化された、必要な最大値が得られると考えてください。
select max(field1) maxf1, field2 f2 from mytable group by f2
上記のリンクは、次のようなものを試すことを提案します:
SELECT mt.field1, mt.field2, mt.field3, ... , mt.fieldn
FROM mytable mt
INNER JOIN (
SELECT max(field1) maxf1, field2 f2 FROM mytable GROUP BY f2
) sq
ON sq.maxf1 = mt.field1 AND sq.f2 = mt.field2
私の特定のケースでは、field1 と field2 は FLOAT と TIMESTAMP 型である可能性があります。したがって、join の比較は適切ではない可能性があります (float と double の比較に最も効果的な方法は何ですか? を参照してsq.maxf1 = mt.field1
ください)。それで、これに関する私へのヒントはありますか?sq.f2 = mt.field2