Используйте "фанки" функциональность mysql для GROUP BY
без агрегирования других столбцов, что просто возвращает первую строку группы. Затем возникает проблема получения строк в правильном порядке до с использованием этой функции, обычно с использованием псевдонима запроса.
Этот подход позволяет избежать любых коррелированных подзапросов (запросов на строку) и требует всего два прохода по таблице (по одному для каждого направления упорядочения):
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 |
+------+-----------+----------+