Usuário com melhor resposta
Resultado da query errado

Pergunta
-
Mais uma pergunta, e se eu precisar filtrar a última entrada de um item,
Faria mais ou menos assim
SELECT ITEM, DESCRICAO, MAX(DATA) FROM PRODUTO WHERE ITEM = 250
testei e não funcionou, trouxe todos os registros ao invés da última data de entrada do item 250, será que é por causa do meu campo estar declarado como varchar?
- Dividir Roberto F FonsecaModerator sexta-feira, 23 de janeiro de 2015 17:07 Mais de uma pergunta na mesma thread
Respostas
-
Deleted
- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 26 de janeiro de 2015 10:21
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 26 de janeiro de 2015 10:21
-
Boa tarde,
Acredito que para obter apenas uma linha será necessário remover a coluna Data do Group By.
E se a coluna Data é do tipo varchar, dependendo do formato em que a data é gravada, será necessário fazer a conversão para o tipo Date ou semelhante para obter a última data. Exemplo para o formato dd/mm/yyyy:
SELECT ITEM, DESCRICAO, MAX(CONVERT(DATE, DATA, 103)) AS DATA FROM PRODUTO WHERE ITEM = 250 GROUP BY ITEM, DESCRICAO
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Editado gapimex sexta-feira, 23 de janeiro de 2015 17:40
- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 26 de janeiro de 2015 10:21
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 26 de janeiro de 2015 10:21
-
Leandro, presumindo que o conteúdo da coluna DESCRIÇÃO é o mesmo para todas as linhas de um mesmo valor de item:
-- código 1
SELECT ITEM, DESCRIÇÃO, Max(DATA) as DATA from PRODUTO where ITEM = 250 group by ITEM, DESCRIÇÃO;
ou ainda
-- código 2 ;with UltProduto as ( SELECT ITEM, DESCRIÇÃO, DATA, Seq= rank() over (order by DATA desc) from PRODUTO where ITEM = 250 ) SELECT ITEM, DESCRIÇÃO, DATA from UltProduto where Seq = 1;
José Diz Belo Horizonte, MG - Brasil
(Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la)
caraca muleke que isso...KKK
Agora fechou, consigo colocar todos os campos que eu precisar.
Obrigado pela força!
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 23 de janeiro de 2015 22:58
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 26 de janeiro de 2015 10:22
-
Deleted
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 26 de janeiro de 2015 10:22
Todas as Respostas
-
LeandroHG,
Então, se você esta fazendo uso de uma função de agregação é obrigatório utilizar o comando Group By especificando as outras colunas que não possuem função de agregação, além disso, provavelmente o SQL Server vai retornar algum erro de sintaxe para o processamento da query.
Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
desculpe esqueci de colocar aqui GROUP BY ITEM, DESCRICAO,DATA
SELECT ITEM, DESCRICAO, MAX(DATA)
FROM PRODUTO
WHERE ITEM = 250
GROUP BY ITEM, DESCRICAO,DATA
ele executou sem erro, mas trouxe todos os registros do item 250, sendo que minha expectativa era trazer somente a ultima data lançada ou ultima vez que ele foi incluído.
-
Boa tarde,
Acredito que para obter apenas uma linha será necessário remover a coluna Data do Group By.
E se a coluna Data é do tipo varchar, dependendo do formato em que a data é gravada, será necessário fazer a conversão para o tipo Date ou semelhante para obter a última data. Exemplo para o formato dd/mm/yyyy:
SELECT ITEM, DESCRICAO, MAX(CONVERT(DATE, DATA, 103)) AS DATA FROM PRODUTO WHERE ITEM = 250 GROUP BY ITEM, DESCRICAO
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Editado gapimex sexta-feira, 23 de janeiro de 2015 17:40
- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 26 de janeiro de 2015 10:21
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 26 de janeiro de 2015 10:21
-
-
Boa tarde,
Acredito que para obter apenas uma linha será necessário remover a coluna Data do Group By.
E se a coluna Data é do tipo varchar, dependendo do formato em que a data é gravada, será necessário fazer a conversão para o tipo Date ou semelhante para obter a última data. Exemplo para o formato dd/mm/yyyy:
SELECT ITEM, DESCRICAO, MAX(CONVERT(DATE, DATA, 103)) AS DATA FROM PRODUTO WHERE ITEM = 250 GROUP BY ITEM, DESCRICAO
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
Fiz da maneira que está aqui e deu certo, trouxe a data mas recente do registro (item, descricao,data) perfeito erra isso que eu queria,
mas só pra entender, gostaria de ver mais uma informação desse registro campo valoritem, executei e ele disse que; não está contida em uma função de agregação nem na cláusula GROUP BY.
Blz, inclui no group by e quando executei ele me trouxe novamente todos os registros ao invés de mostrar somente a data mais recente.
Se eu tirar o campo valor ele mostra só a data mais recente, se colocar qualquer outro campo ele mostra todos
peço desculpas pela simplicidade...srrs(ou burrice mesmo) e agradeço a colaboração
-
Deleted
- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 26 de janeiro de 2015 10:21
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 26 de janeiro de 2015 10:21
-
Leandro,
Para que as linhas sejam agrupadas é necessário que os valores das colunas que estão no Group By sejam iguais.
Como no seu caso a coluna valoritem possui valores diferentes é retornada uma linha para cada valor.
Talvez uma alternativa para o seu caso seja utilizar uma função de agregação (max, min, avg, etc) nessa coluna, removendo a mesma do Group By.
Se você não conseguir obter o valor desejado dessa forma, acho que será necessário você definir qual critério deve ser utilizado para definir qual valor deve ser retornado.
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
-
Leandro, presumindo que o conteúdo da coluna DESCRIÇÃO é o mesmo para todas as linhas de um mesmo valor de item:
-- código 1
SELECT ITEM, DESCRIÇÃO, Max(DATA) as DATA from PRODUTO where ITEM = 250 group by ITEM, DESCRIÇÃO;
ou ainda
-- código 2 ;with UltProduto as ( SELECT ITEM, DESCRIÇÃO, DATA, Seq= rank() over (order by DATA desc) from PRODUTO where ITEM = 250 ) SELECT ITEM, DESCRIÇÃO, DATA from UltProduto where Seq = 1;
José Diz Belo Horizonte, MG - Brasil
(Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la)
caraca muleke que isso...KKK
Agora fechou, consigo colocar todos os campos que eu precisar.
Obrigado pela força!
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 23 de janeiro de 2015 22:58
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 26 de janeiro de 2015 10:22
-
Deleted
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 26 de janeiro de 2015 10:22