none
Valor Máximo RRS feed

  • Pergunta

  • Tenho a seguinte tabela:

    SELECT EmpregadoSalario.id_EmpregadoSalario, EmpregadoSalario.id_Empregado, EmpregadoSalario.Salario, EmpregadoSalario.mesAno_Inicio, EmpregadoSalario.id_MotivoAlteracaoSalario
    FROM EmpregadoSalario

    Preciso selecionar o último salário de cada empregado, Como fazer isto?

    Minha tabela:


    [b]Sergio Ivanenko[/b]

    segunda-feira, 13 de agosto de 2012 15:36

Respostas

  • Tente assim:

    SELECT 
        B.* 
    FROM
    (
        SELECT 
            A.id_EmpregadoSalario, 
            A.id_Empregado, 
            A.Salario, 
            A.mesAno_Inicio, 
            A.id_MotivoAlteracaoSalario,
            ROW_NUMBER() OVER(PARTITION BY A.id_Empregado ORDER BY A.id_EmpregadoSalario DESC) AS N        
        FROM 
            EmpregadoSalario AS A
    ) AS B
    WHERE
        B.N = 1


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino

    • Marcado como Resposta Harley Araujo quarta-feira, 15 de agosto de 2012 13:21
    segunda-feira, 13 de agosto de 2012 16:50
  • WITH cte_ultimo_salario
    AS
    (
    SELECT
              id_empregado
             ,MAX(salario) [Último_Salário]
    FROM
             EmpregadoSalario
    GROUP BY 
             id_empregado
    )

    SELECT
               e.id_EmpregadoSalario          [Id empregado_salário]
               ,cte.id_empregado                [Id empregado]
               ,cte.Último_Salário                [Último salário]
               ,e.mesAno_Inicio                   [Mês ano_início]
               ,e.id_MotivoAlteracaoSalario  [Id motivo_alteração_salario]
    FROM
               cte_ultimo_salario cte
               JOIN EmpregadoSalario e
                    ON cte.id_empregado = e.id_empregado AND
                          cte.ÚltimoSalário = e.salario

    ---------------------------------------------------------------------------

    Caso a resposta tenha sido útil por favor marque-a como útil :)!


    segunda-feira, 13 de agosto de 2012 17:11

Todas as Respostas

  • Pode utilizar o max(EmpregadoSalario.Salario) no select com group by.
    segunda-feira, 13 de agosto de 2012 15:58
  • Tente assim:

    SELECT 
        B.* 
    FROM
    (
        SELECT 
            A.id_EmpregadoSalario, 
            A.id_Empregado, 
            A.Salario, 
            A.mesAno_Inicio, 
            A.id_MotivoAlteracaoSalario,
            ROW_NUMBER() OVER(PARTITION BY A.id_Empregado ORDER BY A.id_EmpregadoSalario DESC) AS N        
        FROM 
            EmpregadoSalario AS A
    ) AS B
    WHERE
        B.N = 1


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino

    • Marcado como Resposta Harley Araujo quarta-feira, 15 de agosto de 2012 13:21
    segunda-feira, 13 de agosto de 2012 16:50
  • WITH cte_ultimo_salario
    AS
    (
    SELECT
              id_empregado
             ,MAX(salario) [Último_Salário]
    FROM
             EmpregadoSalario
    GROUP BY 
             id_empregado
    )

    SELECT
               e.id_EmpregadoSalario          [Id empregado_salário]
               ,cte.id_empregado                [Id empregado]
               ,cte.Último_Salário                [Último salário]
               ,e.mesAno_Inicio                   [Mês ano_início]
               ,e.id_MotivoAlteracaoSalario  [Id motivo_alteração_salario]
    FROM
               cte_ultimo_salario cte
               JOIN EmpregadoSalario e
                    ON cte.id_empregado = e.id_empregado AND
                          cte.ÚltimoSalário = e.salario

    ---------------------------------------------------------------------------

    Caso a resposta tenha sido útil por favor marque-a como útil :)!


    segunda-feira, 13 de agosto de 2012 17:11