Полагаю, вы можете использовать простой коррелированный запрос с LIMIT
:
SELECT name
, (SELECT price FROM t AS x WHERE name = t.name AND source = 'att' ORDER BY lastest_update DESC LIMIT 1) AS att_price
, (SELECT price FROM t AS x WHERE name = t.name AND source = 'sprint' ORDER BY lastest_update DESC LIMIT 1) AS sprint_price
FROM t
GROUP BY name
Или, возможно, двойной GROUP BY
:
SELECT t.name
, MAX(CASE WHEN t.lastest_update = a.att_date THEN price END) AS att_price
, MAX(CASE WHEN t.lastest_update = a.sprint_date THEN price END) AS sprint_price
FROM t
JOIN (
SELECT name
, MAX(CASE WHEN source = 'att' THEN lastest_update END) AS att_date
, MAX(CASE WHEN source = 'sprint' THEN lastest_update END) AS sprint_date
FROM t
GROUP BY name
) AS a ON t.name = a.name
GROUP BY t.name