Cela dépend de vos données (combien de lignes y a-t-il par groupe ?) et de vos index.
Voir Optimiser les requêtes TOP N par groupe pour quelques comparaisons de performances de 3 approches.
Dans votre cas avec des millions de lignes pour seulement un petit nombre de véhicules, j'ajouterais un index sur VehicleID, Timestamp
et faites
SELECT CA.*
FROM Vehicles V
CROSS APPLY (SELECT TOP 1 *
FROM ChannelValue CV
WHERE CV.VehicleID = V.VehicleID
ORDER BY TimeStamp DESC) CA