none
Resultado da query errado RRS feed

  • 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?

    sexta-feira, 23 de janeiro de 2015 16:46

Respostas

  • Deleted
    sexta-feira, 23 de janeiro de 2015 18:59
  • 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


    sexta-feira, 23 de janeiro de 2015 17:39
  • 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!

    sexta-feira, 23 de janeiro de 2015 19:13
  • Deleted
    sábado, 24 de janeiro de 2015 09:44

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]

    sexta-feira, 23 de janeiro de 2015 17:01
  • 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.  

    sexta-feira, 23 de janeiro de 2015 17:08
  • 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


    sexta-feira, 23 de janeiro de 2015 17:39
  • Acho que poderia utilizar um SELECT dentro da cláusula Where, desta forma:

     WHERE DATA = (SELECT MAX(DATA) FROM PRODUTO) AND ITEM = 250

    sexta-feira, 23 de janeiro de 2015 17:56
  • 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

    sexta-feira, 23 de janeiro de 2015 18:50
  • Deleted
    sexta-feira, 23 de janeiro de 2015 18:59
  • 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

    sexta-feira, 23 de janeiro de 2015 19:03
  • 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!

    sexta-feira, 23 de janeiro de 2015 19:13
  • Deleted
    sábado, 24 de janeiro de 2015 09:44