テーブルdata
+-----+----------------+--------+----------------+
| ID | Required_by | Name | Another_Field |
+-----+----------------+--------+----------------+
| 1 | 7 August | cat | X |
| 2 | 7 August | cat | Y |
| 3 | 10 August | cat | Z |
| 4 | 11 August | dog | A |
+-----+----------------+--------+----------------+
私がやりたいのは、名前でグループ化し、各グループについて、日付が必要な最も早い行の1つを選択することです。
このデータセットでは、最終的に行 1 と 4、または行 2 と 4 のいずれかになりたいと考えています。
期待される結果:
+-----+----------------+--------+----------------+
| ID | Required_by | Name | Another_Field |
+-----+----------------+--------+----------------+
| 1 | 7 August | cat | X |
| 4 | 11 August | dog | A |
+-----+----------------+--------+----------------+
また
+-----+----------------+--------+----------------+
| ID | Required_by | Name | Another_Field |
+-----+----------------+--------+----------------+
| 2 | 7 August | cat | Y |
| 4 | 11 August | dog | A |
+-----+----------------+--------+----------------+
1、2、および 4 を返すものがありますが、最初のグループから 1 つだけを選択して目的の結果を得る方法がわかりません。グループ化の後にanddata
を取得できるように、テーブルでグループ化に参加しています。ID
another_field
SELECT d.id, d.name, d.required_by, d.another_field
FROM
(
SELECT min(required_by) as min_date, name
FROM data
GROUP BY name
) agg
INNER JOIN
data d
on d.required_by = agg.min_date AND d.name = agg.name