Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Consulta para obter o registro mais recente e (em caso de empate) com o maior valor ou percentual por cartão e serviço


Você não mencionou se a coluna type varia para um determinado card,service par. Supondo que seja o mesmo, você deve conseguir obter o resultado com um select aninhado , incluindo type no select interno e 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
    );

Demonstração