GROUP BY
のmysqlの「ファンキーな」機能を使用する なし 他の列を集約します。これにより、最初のが返されます。 グループの行。問題は、行を前の正しい順序にすることです。 この機能を使用します。通常は、エイリアスクエリを使用します。
このアプローチは、相関するサブクエリ(行ごとのクエリ)を回避し、テーブルを2回パスするだけで済みます(順序付けの各方向に1回):
select x2.type, x2.dat as first_dat, y2.dat as last_dat
from (select *
from (select type, dat
from so8735514
order by 1, 2) x1
group by 1) x2
join (select *
from (select type, dat
from so8735514
order by 1, 2 desc) y1
group by 1) y2 on y2.type = x2.type;
テストコード:
create table so8735514 (idx int, type text, dat text);
insert into so8735514 values
(0, 'a', 'foo1'),
(1, 'b', 'foo2'),
(2, 'c', 'foo3'),
(3, 'a', 'foo4'),
(4, 'b', 'foo5'),
(5, 'c', 'foo6'),
(6, 'a', 'foo7'),
(7, 'b', 'foo8'),
(8, 'c', 'foo9');
出力:
+------+-----------+----------+
| type | first_dat | last_dat |
+------+-----------+----------+
| a | foo1 | foo7 |
| b | foo2 | foo8 |
| c | foo3 | foo9 |
+------+-----------+----------+