Usuário com melhor resposta
Select com MAX date

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
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
Todas as 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
-
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;
-
-
;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)