none
Select com MAX date RRS feed

  • Pergunta

  • Olá, alguém poderia dar uma sugestão no código abaixo?

    Eu preciso que retorne uma consulta com as últimas datas de cada codigo do campo "cod_prod_ser_tipo" agrupador pelo nome do animal, porém ao executar o comando fica processando e nada de retorno. 

    SELECT B.nome,  MAX(A1.data_atividade) as Higiene,  MAX(A1.data_atividade) as Desenvolvimento, MAX(A3.data_atividade) as Parasito, MAX(A4.data_atividade) as Vacina
    FROM Animal_Companhia B, Diario as A1, Diario as A2, Diario as A3, Diario as A4 
    WHERE A1.cod_prod_ser_tipo = 1 
    AND   A2.cod_prod_ser_tipo = 2
    AND   A3.cod_prod_ser_tipo = 3
    AND   A4.cod_prod_ser_tipo = 6
    AND   B.id = A1.cod_animal 
    GROUP BY B.nome
    ORDER BY B.nome

    terça-feira, 12 de julho de 2016 14:28

Respostas

  • Bom dia,

    Wilson, acredito que nesse caso você pode utilizar subquerys. Ex:

    SELECT 
        B.nome,  
        (SELECT MAX(A1.data_atividade) FROM Diario as A1
         WHERE A1.cod_animal = B.id AND A1.cod_prod_ser_tipo = 1) as Higiene,  
        (SELECT MAX(A2.data_atividade) FROM Diario as A2
         WHERE A2.cod_animal = B.id AND A2.cod_prod_ser_tipo = 2) as Desenvolvimento, 
        (SELECT MAX(A3.data_atividade) FROM Diario as A3
         WHERE A3.cod_animal = B.id AND A3.cod_prod_ser_tipo = 3) as Parasito, 
        (SELECT MAX(A4.data_atividade) FROM Diario as A4
         WHERE A4.cod_animal = B.id AND A4.cod_prod_ser_tipo = 6) as Vacina
    FROM Animal_Companhia B
    ORDER BY 
        B.nome

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Wilson Boris terça-feira, 12 de julho de 2016 15:01
    terça-feira, 12 de julho de 2016 14:41

Todas as Respostas

  • Deleted
    terça-feira, 12 de julho de 2016 14:39
  • Bom dia,

    Wilson, acredito que nesse caso você pode utilizar subquerys. Ex:

    SELECT 
        B.nome,  
        (SELECT MAX(A1.data_atividade) FROM Diario as A1
         WHERE A1.cod_animal = B.id AND A1.cod_prod_ser_tipo = 1) as Higiene,  
        (SELECT MAX(A2.data_atividade) FROM Diario as A2
         WHERE A2.cod_animal = B.id AND A2.cod_prod_ser_tipo = 2) as Desenvolvimento, 
        (SELECT MAX(A3.data_atividade) FROM Diario as A3
         WHERE A3.cod_animal = B.id AND A3.cod_prod_ser_tipo = 3) as Parasito, 
        (SELECT MAX(A4.data_atividade) FROM Diario as A4
         WHERE A4.cod_animal = B.id AND A4.cod_prod_ser_tipo = 6) as Vacina
    FROM Animal_Companhia B
    ORDER BY 
        B.nome

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Wilson Boris terça-feira, 12 de julho de 2016 15:01
    terça-feira, 12 de julho de 2016 14:41
  • Grande José Diz,

    acho que fiz algo errado com o código abaixo, pois mantem-se em processamento ao tentar executá-lo.

    SELECT B.nome, MAX(A1.data_atividade) as Higiene,
         MAX(A2.data_atividade) as Desenvolvimento, 
         MAX(A3.data_atividade) as Parasito, 
         MAX(A4.data_atividade) as Vacina
    FROM Animal_Companhia B
         left join Diario as A1 on B.id = A1.cod_animal
         left join Diario as A2 on B.id = A2.cod_animal
         left join Diario as A3 on B.id = A3.cod_animal
         left join Diario as A4 on B.id = A4.cod_animal
    GROUP BY B.nome
    ORDER BY B.nome;

    terça-feira, 12 de julho de 2016 14:53
  • Deleted
    terça-feira, 12 de julho de 2016 15:10
  • ;WITH DIARIO AS (SELECT * FROM Diario WITH(NOLOCK))
    SELECT
    [nome]            = AN_COMP.[nome],
    [Higiene]         = MAX(DI1.[data_atividade]),
        [Desenvolvimento] = MAX(DI2.[data_atividade]),
        [Parasito]        = MAX(DI3.[data_atividade]),
        [Vacina]          = MAX(DI4.[data_atividade])
    FROM [Animal_Companhia] AN_COMP WITH(NOLOCK)

    LEFT OUTER JOIN [DIARIO] DI1
      ON AN_COMP.[id] = DI1.[cod_animal]
    LEFT OUTER JOIN DIARIO DI2
      ON AN_COMP.[id] = DI2.[cod_animal]
    LEFT OUTER JOIN DIARIO DI3
      ON AN_COMP.[id] = DI3.[cod_animal]
    LEFT OUTER JOIN DIARIO DI4
      ON AN_COMP.[id] = DI4.[cod_animal]

    GROUP BY
    AN_COMP.[nome]
    ORDER BY
    AN_COMP.[nome]

    OPTION(MAXDOP 12)
    terça-feira, 12 de julho de 2016 20:24