none
Busca maior valor sem repetir o registro RRS feed

  • Pergunta

  • Olá pessoal,

    Estou com a seguinte situação, tenho uma tabela com dados referente a entrada de nota fiscal (n_notafiscal,n_item,v_item,data_entrada) eu preciso filtrar todos os item em um determinando período (os item não podem se repetir, mas é preciso mostrar o maior v_item)  exemplo:

    tabela

    n_fiscal    n_item   v_item   data_entrada

    111          001        0,10       20150101

    111          001        0,20       20150101

    112          001        0,20       20150101  

    113          001        0,30       20150101

    113          002        0,35       20150101

    Em uma consulta eu preciso retornar o item de maior valor:

     n_fiscal    n_item   v_item   data_entrada

     113         001          0,30     20150101

     113         002          0,35     20150101

    Caramba já bati bastante a cuca e não fecha, alguém ajuda?

    quinta-feira, 24 de setembro de 2015 18:53

Respostas

Todas as Respostas

  • Lendro,

    Usa a clausula Distinct  e order by

    SELECT DISTINCT 
     v_item
    from Tabela
    ORDER BY v_item ASC 

     

    quinta-feira, 24 de setembro de 2015 19:37
  • Fiz isso e até deu certo quando coloco um só campo, mas se eu colocar mais campos exemplo

    (Select n_item,v_item) na pesquisa ele desconsidera o distinct e repete os registros.

    quinta-feira, 24 de setembro de 2015 19:43
  • Qual é campo que você  precisa que seja distinto?
    quinta-feira, 24 de setembro de 2015 19:52
  • n_item...mais ou menos assim

    n_fiscal    n_item   v_item   data_entrada

     113         001          0,30     20150101

     113         002          0,35     20150101

    quinta-feira, 24 de setembro de 2015 19:58
  • Fiz algo assim

    Select A.n_item,B.data_entrada,B.v_item

        From (Select Distinct n_item

                     from notafiscal

                      where data_entrada between 20150101 and 20150101

                  ) AS A, notafiscal AS B

    Where A.n_item = B.n_item and B.dataentrada between 20150101 and 20150101 

    quinta-feira, 24 de setembro de 2015 20:18
  • Fiz algo assim

    Select A.n_item,B.data_entrada,B.v_item

        From (Select Distinct n_item

                     from notafiscal

                      where data_entrada between 20150101 and 20150101

                  ) AS A, notafiscal AS B

    Where A.n_item = B.n_item and B.dataentrada between 20150101 and 20150101 

    Mas não funcionou ele traz n_item repetido
    quinta-feira, 24 de setembro de 2015 20:20
  • Você tentou usar distinct na chave da sua tabela?
    • Editado Carlos_rodrigues quinta-feira, 24 de setembro de 2015 20:39 correção
    quinta-feira, 24 de setembro de 2015 20:38
  • Boa tarde,

    Leandro, experimente dessa forma:

    with CTE_RN as
    (
        Select 
            n_fiscal, 
            n_item,
            data_entrada,
            v_item,
            ROW_NUMBER() OVER(PARTITION BY n_item ORDER BY v_item DESC) as RN
        From notafiscal
        where data_entrada between '20150101' and '20150101'
    )
    
    select * from CTE_RN
    where RN = 1

    Espero que ajude.


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

    • Sugerido como Resposta Marques Junior quinta-feira, 24 de setembro de 2015 22:17
    • Marcado como Resposta Leandro HG sexta-feira, 25 de setembro de 2015 12:00
    quinta-feira, 24 de setembro de 2015 21:02
  • cara fechou direitinho, era isso mesmo Deus abençoe pela ajuda. Só uma coisa, será que você pode me dizer em poucas palavras o que faz essa linha fez? 
    ROW_NUMBER() OVER(PARTITION BY n_item ORDER BY v_item DESC) as RN
    sexta-feira, 25 de setembro de 2015 12:00
  • Row_Number() é uma função de classificação do SQL Server:

    https://msdn.microsoft.com/pt-br/library/ms189798(v=sql.120).aspx

    Espero que ajude.


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

    • Marcado como Resposta Leandro HG sexta-feira, 25 de setembro de 2015 14:22
    sexta-feira, 25 de setembro de 2015 12:19