Я думаю, что это намного проще, используя оконные функции и select distinct
:
select distinct facility_id, name,
first_value(value) over (partition by facility_id, name order by created_at asc) as first_value,
min(created_at) as first_created_at,
first_value(value) over (partition by facility_id, name order by created_at desc) as last_value,
max(created_at) as last_created_at
from t;
Нет подзапросов.Нет объединений.
Вы также можете использовать массивы для выполнения тех же функций, используя group by
.Жаль, что SQL Server напрямую не поддерживает first_value()
как оконную функцию.