Вы можете фильтровать, используя коррелированный подзапрос:
select t.*
from t
where t.starttime = (select min(t2.starttime)
from t t2
where t2.serial_number = t.serial_number
);
Предполагается, что «first» основано на времени начала.
При индексе (serial_number, starttime)
обычно это имеетлучшая производительность. Другой популярный подход использует row_number()
:
select t.*
from (select t.*,
row_number() over (partition by serial_number order by starttime desc) as seqnum
from t
) t
where seqnum = 1;