none
Função MAX RRS feed

  • Pergunta

  • Quero obter o ultimo inventário registrado, para isto criei a seguinte consulta:

    SELECT  MAX(id_EmpregadoIventarioMedico) AS id_EmpregadoIventarioMedico,
     id_Empregado, 
    MAX(dataPedidoInventario) AS dataPedidoInventario,  
    MAX(dataInventario) AS dataInventario, 
    MAX(dataDeConclusao) AS dataDeConclusao, 
    MAX(notaDeConclusao) AS notaDeConclusao, realizado
    FROM  dbo.Empregado_IventarioMedico
    GROUP BY realizado, id_Empregado
    ORDER BY id_Empregado
    Apesar de apresentar o resultado esperado, me parece um pouco estranho. Se um dos campos com a função MAX for modificada para GROUP BY, a consulta me mostra todos os registros e não o último inventário de cada empregado.


    [b]Sergio Ivanenko[/b]


    • Editado Ivanenko terça-feira, 20 de novembro de 2012 02:46
    terça-feira, 20 de novembro de 2012 02:45

Respostas

  • Cara, apesar de não ter entendido muito bem a sua dúvida, mas posso sugerir uma outra maneira de rankear resultados, experimente usar CTE (http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105).aspx) com o auxílio do ROW_NUMBER (http://msdn.microsoft.com/pt-br/library/ms186734.aspx)

    WITH CTE AS (
         SELECT   *
                 ,'ROWID' = ROW_NUMBER() OVER (PARTITION BY id_EmpregadoIventarioMedico ORDER BY dataPedidoInventario DESC)
         FROM     dbo.Empregado_IventarioMedico
                 )
    SELECT     *
    FROM       CTE
    WHERE      ROWID = 1
    ORDER BY   id_Empregado
               
    

    Abs,

    • Marcado como Resposta Ivanenko terça-feira, 20 de novembro de 2012 13:07
    terça-feira, 20 de novembro de 2012 04:03

Todas as Respostas

  • Cara, apesar de não ter entendido muito bem a sua dúvida, mas posso sugerir uma outra maneira de rankear resultados, experimente usar CTE (http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105).aspx) com o auxílio do ROW_NUMBER (http://msdn.microsoft.com/pt-br/library/ms186734.aspx)

    WITH CTE AS (
         SELECT   *
                 ,'ROWID' = ROW_NUMBER() OVER (PARTITION BY id_EmpregadoIventarioMedico ORDER BY dataPedidoInventario DESC)
         FROM     dbo.Empregado_IventarioMedico
                 )
    SELECT     *
    FROM       CTE
    WHERE      ROWID = 1
    ORDER BY   id_Empregado
               
    

    Abs,

    • Marcado como Resposta Ivanenko terça-feira, 20 de novembro de 2012 13:07
    terça-feira, 20 de novembro de 2012 04:03
  • Fábio

    Resolvi meu problema conforme sua sugestão, obrigado.

    Mas me surgiu uma pequena dúvida, a consulta usando CTE seria algo como uma consulta "UNIÃO"?


    [b]Sergio Ivanenko[/b]

    terça-feira, 20 de novembro de 2012 13:17