Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 508479
            [titulo] => 3 maiores valores
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-01-26 10:17:37
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 391490
            [status] => A
            [isExample] => 
            [NomeUsuario] => Thiago Rosa Cruz
            [Apelido] => Thiago Cruz
            [Foto] => 391490_20141017090811.jpg
            [Conteudo] => [code]WITH RANK_CTE AS (
SELECT AGENTE, CONTRATO, MAX(VALOR) AS 'VALOR',
ROW_NUMBER() OVER
(PARTITION BY AGENTE ORDER BY MAX(VALOR) DESC) RANK_CONTRATOS
FROM NOME_TABELA
GROUP BY AGENTE, CONTRATO, VALOR
)

SELECT * FROM RANK_CTE
WHERE RANK_CONTRATOS <= 3
ORDER BY 1[/code] ) )

3 maiores valores

Alexandre
   - 23 jan 2015

Em uma tabela SQL tenho os campos a seguir, Agente, Contrato, Valor, preciso extrair os 3 maiores valores de contrato para cada um dos agentes.
Exemplo:
Agente, Contrato, Valor
01, A, 120
01, B, 110
01, C, 100
02, A, 90
02, B, 70
02, C, 50
E assim sucessivamente.
Desde já agradeço.
Alexandre

Post mais votado

Thiago Cruz
   - 26 jan 2015

#Código

WITH RANK_CTE AS (
SELECT AGENTE, CONTRATO, MAX(VALOR) AS 'VALOR', 
ROW_NUMBER() OVER 
    (PARTITION BY AGENTE ORDER BY MAX(VALOR) DESC)  RANK_CONTRATOS
	FROM NOME_TABELA
GROUP BY AGENTE, CONTRATO, VALOR
 )

SELECT * FROM RANK_CTE
WHERE RANK_CONTRATOS <= 3 
ORDER BY 1

Ronaldo Lanhellas
   - 23 jan 2015

A única forma de fazer isso é através de uma função, pois em um SQL simples você não consegue fazer esse tipo de detalhamento.

Alexandre
   - 27 jan 2015

Thiago,

Perfeito, agradeço a ajuda.

Abraço