none
Obter um resultado que apareça em 1ª posição, se possuir um valor especificado em SQL RRS feed

  • Dotaz

  • Boa noite pessoal, alguém poderia me ajudar com uma query? preciso criar uma query que siga 3 regras, elas são:

    1) gsm que se repetir
    2) motivo_envio que seja diferente
    3) status que esteja com ANOMALIA e que apareça como o 1º resultado (por cima dos demais)
    Essa terceira regra não estou conseguindo fazer funcionar, irei demostrar 2 exemplos, um que eu não preciso, e outro que preciso que me traga como resultado, e que se refere a terceira regra.
    Não preciso como resultado o número 111, mas preciso do resultado 222
    _________________________________________________
    | 111 | aaa | LIBERADO | 02/01/2019 |
    | 111 | aaa | ANOMALIA | 01/01/2019 |
    -------------------------------------------------
    | 222 | aaa | ANOMALIA | 02/01/2019 | *
    | 222 | bbb | PENDENTE | 01/01/2019 |
    -------------------------------------------------


    Como informado não preciso dos número 111, pois o status LIBERADO está por cima da ANOMALIA, agora o número 222 preciso do que está com ANOMALIA porque esse status está por cima.


    • Upravený Sup3r-Us3r pátek 12. července 2019 2:24
    pátek 12. července 2019 2:23

Odpovědi

  • Eis uma sugestão:

    -- código #1
    with tabela_2 as (
    SELECT gsm, motivo_envio, status, data_ativacao,
           seq= row_number() over (partition by gsm, motivo_envio order by data_ativacao desc)
      from export
    )
    SELECT gsm, motivo_envio, status, data_ativacao
      from tabela_2 
      where seq= 1
            and status = 'ANOMALIA';  

     

    A partir de dados postados em outro fórum, sobre o mesmo assunto, obtive o seguinte resultado:

     


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    pátek 12. července 2019 6:04
  • Bom dia,

    Sup3r-Us3r, não sei se entendi os requisitos corretamente mas experimente fazer uns testes mais ou menos dessa forma:

    with CTE_RN as
    (
        select
            *,
            row_number() over(partition by gsm order by data desc) as RN
        from Tabela
    )
    
    select 
        c.* 
    from CTE_RN as c
    where
        RN = 1 and
        status = 'ANOMALIA' and
        exists
            (select 1 from Tabela as t
             where
                 t.gsm = c.gsm and
                 t.motivo_envio <> c.motivo_envio)

    Espero que ajude


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

    pátek 12. července 2019 13:12

Všechny reakce

  • Eis uma sugestão:

    -- código #1
    with tabela_2 as (
    SELECT gsm, motivo_envio, status, data_ativacao,
           seq= row_number() over (partition by gsm, motivo_envio order by data_ativacao desc)
      from export
    )
    SELECT gsm, motivo_envio, status, data_ativacao
      from tabela_2 
      where seq= 1
            and status = 'ANOMALIA';  

     

    A partir de dados postados em outro fórum, sobre o mesmo assunto, obtive o seguinte resultado:

     


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    pátek 12. července 2019 6:04
  • Bom dia,

    Sup3r-Us3r, não sei se entendi os requisitos corretamente mas experimente fazer uns testes mais ou menos dessa forma:

    with CTE_RN as
    (
        select
            *,
            row_number() over(partition by gsm order by data desc) as RN
        from Tabela
    )
    
    select 
        c.* 
    from CTE_RN as c
    where
        RN = 1 and
        status = 'ANOMALIA' and
        exists
            (select 1 from Tabela as t
             where
                 t.gsm = c.gsm and
                 t.motivo_envio <> c.motivo_envio)

    Espero que ajude


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

    pátek 12. července 2019 13:12
  • Sup3r-Us3r, não sei se entendi os requisitos corretamente mas experimente fazer uns testes mais ou menos dessa forma: ...
    "gapimex", os dados para testes estão em https://www.db-fiddle.com/f/nASFfqYbSFJgpV4yyhzgeb/0

    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]




    • Upravený José Diz pátek 12. července 2019 13:31
    pátek 12. července 2019 13:31
  • Opa, muito obrigado José, valeu mesmo, poxa tu achou essa minha dúvida lá no Stack Overflow, e ainda testou, cara muito obrigado mesmo, certinho!!! era isso que precisava, muito obrigado!
    pátek 12. července 2019 23:05
  • Muito obrigado gapimex, pela ajuda, era justamente essa lógica que precisava, você e o José compreendeu perfeitamente, obrigado pela ajuda!
    pátek 12. července 2019 23:08