Gunakan fungsionalitas "funky" mysql dari GROUP BY
tanpa menggabungkan kolom lain, yang hanya mengembalikan pertama barisan kelompok. Masalahnya kemudian menjadi mendapatkan baris ke dalam urutan yang benar sebelum menggunakan fungsi ini, biasanya dengan menggunakan kueri alias.
Pendekatan ini menghindari subkueri apa pun yang berkorelasi (kueri per baris) dan hanya membutuhkan dua lintasan di atas tabel (satu untuk setiap arah pemesanan):
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;
Kode tes:
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');
Keluaran:
+------+-----------+----------+
| type | first_dat | last_dat |
+------+-----------+----------+
| a | foo1 | foo7 |
| b | foo2 | foo8 |
| c | foo3 | foo9 |
+------+-----------+----------+