Vous n'avez pas mentionné si la colonne type varie pour un card,service donné paire. En supposant qu'il en soit de même, vous devriez pouvoir obtenir le résultat avec un select imbriqué , y compris type dans le select intérieur et group by .
SELECT card
,service
,CASE
WHEN type = 'v'
THEN value
ELSE perc
END AS max_result
FROM (
SELECT card
,service
,type
,MAX(date_t) AS Date_t
,MAX(value) KEEP (
DENSE_RANK FIRST ORDER BY date_t DESC
) AS value
,MAX(percentage) KEEP (
DENSE_RANK FIRST ORDER BY date_t DESC
) AS perc
FROM yourtable
GROUP BY card
,service
,type
);