sql查询

ghg1uchk  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(289)

我是mysql的新手,一直在为一个项目学习mysql。我有一个如下的表(表1),我需要它的输出作为表2。

Table 1: Input Table
+----+----------+-----+-----------+----------+
| ID | FRUIT_TYPE    | FRUIT      | CREATED_AT   
+----+----------+-----+-----------+----------+
|  1 | Drupes        |  plums     | 2020-06-12 25:10:10
|  2 | Drupes        |  peaches   | 2020-06-11 25:10:10
|  3 | Drupes        |  olives    | 2020-06-11 24:10:10
|  4 | Berries       |  grapes    | 2020-06-08 25:10:10
|  5 | Pomes         |  apples    | 2020-06-07 25:10:10
|  6 | Pomes         |  pears     | 2020-06-05 25:10:10
|  7 | Hesperidia    |  lemons    | 2020-06-05 24:10:10
|  8 | Hesperidia    |  oranges   | 2020-06-05 23:10:10
+----+----------+-----+-----------+----------+
Table 2: Final Output Desired 
+----+----------+-----+-----------+----------+
| ID | FRUIT_TYPE    | FRUIT      | CREATED_AT   
+----+----------+-----+-----------+----------+
|  3 | Drupes        |  olives    | 2020-06-11 24:10:10
|  4 | Berries       |  grapes    | 2020-06-08 25:10:10
|  6 | Pomes         |  pears     | 2020-06-05 25:10:10
|  8 | Hesperidia    |  oranges   | 2020-06-05 23:10:10
+----+----------+-----+-----------+----------+

输出按created\u at字段排序,如果同一水果类型有多行,则选取created\u at值最少的字段。
例如,在核果的3个值中,只有1行水果是橄榄,创建的值是最少的。
如果发出sql查询,请解释它:p提前谢谢!

edqdpe6u

edqdpe6u1#

一个简单的方法是关联子查询:

select t.*
from t
where t.created_at = (select min(t2.created_at)
                      from t t2
                      where t2.fruit_type = t.fruit_type
                     );

带索引的 (fruit_type, created_at) ,这可能也是最有效的方法。

相关问题