none
Pegar linha de baixo RRS feed

  • Pergunta

  • Galera, blxxxx

    preciso de um help, Tenho uma tabela que contem o ID da conta , essa tabela tem o histórico diário da situação do cliente, hoje o cliente esta no status 3  e amanha tbm , isso me dará 2 registros porem só preciso pega a primeira vez que ele entrou nesse status,caso no terceiro dia ele mude o status para 8 eu capturo novamente , mas pode ocorrer dele voltar para 3 , então tenho q pegar novamente, tentei usar o
    Row_number e o LAG mas não funcionou, alguém tem ideia de como posso acumular as movimentações de status caso ele volte para um status que já gravei uma vez????? 

    Grato pela ajuda.


    Diego Almeida Barreto</strong> <br/> <em>System Analyst / Software Developer</em> <br/> <img </p> </div>

    terça-feira, 23 de agosto de 2016 19:57

Respostas

  • Boa tarde,

    Não sei se entendi corretamente a questão mas experimente mais ou menos dessa forma:

    with CTE_Lag as
    (
        select
            *,
            LAG(Status, 1) OVER(PARTITION BY IdConta ORDER BY Data) as StatusAnt
        from Tabela
    )
    
    select 
        * 
    from CTE_Lag
    where 
        Status <> StatusAnt

    Espero que ajude


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

    terça-feira, 23 de agosto de 2016 20:22
  • Boa tarde,

    Não sei se entendi corretamente a questão mas experimente mais ou menos dessa forma:

    with CTE_Lag as
    (
        select
            *,
            LAG(Status, 1) OVER(PARTITION BY IdConta ORDER BY Data) as StatusAnt
        from Tabela
    )
    
    select 
        * 
    from CTE_Lag
    where 
        Status <> StatusAnt

    Espero que ajude


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

    Realizei um teste baseado no que você falou e a solução do Gapimex atende com apenas uma resalva, utilize na cláusula do where "STATUS <> StatusAnt OR StatusAnt IS NULL", dessa forma você conseguirá pegar a primeira ocorrência de status.

    Abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    terça-feira, 23 de agosto de 2016 20:45

Todas as Respostas

  • Boa tarde,

    Não sei se entendi corretamente a questão mas experimente mais ou menos dessa forma:

    with CTE_Lag as
    (
        select
            *,
            LAG(Status, 1) OVER(PARTITION BY IdConta ORDER BY Data) as StatusAnt
        from Tabela
    )
    
    select 
        * 
    from CTE_Lag
    where 
        Status <> StatusAnt

    Espero que ajude


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

    terça-feira, 23 de agosto de 2016 20:22
  • Boa tarde,

    Não sei se entendi corretamente a questão mas experimente mais ou menos dessa forma:

    with CTE_Lag as
    (
        select
            *,
            LAG(Status, 1) OVER(PARTITION BY IdConta ORDER BY Data) as StatusAnt
        from Tabela
    )
    
    select 
        * 
    from CTE_Lag
    where 
        Status <> StatusAnt

    Espero que ajude


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

    Realizei um teste baseado no que você falou e a solução do Gapimex atende com apenas uma resalva, utilize na cláusula do where "STATUS <> StatusAnt OR StatusAnt IS NULL", dessa forma você conseguirá pegar a primeira ocorrência de status.

    Abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    terça-feira, 23 de agosto de 2016 20:45
  • amigos, 

    a função LAG não funcionou aqui, a versão do SQL é 2008, fiz isso aquie e funcionou:

     
    ;WITH EmCobranca AS
    (
    SELECT A.*, CASE WHEN A.StatusConta = B.StatusConta THEN 0 ELSE 1 END AS Movimentacao
    FROM 
    (
    SELECT * 
    ,ROW_NUMBER ()  OVER (  PARTITION BY id_conta ORDER BY datasaldo )  LINHA_A
    FROM #temp
    ) A
    LEFT JOIN 
    (
    SELECT * 
    ,ROW_NUMBER ()  OVER (  PARTITION BY id_conta ORDER BY datasaldo )  LINHA_B
    FROM #temp
    ) B
    ON A.id_conta = B.id_conta AND B.LINHA_B = A.LINHA_A+1
    )
    SELECT id_conta  ,count(Id_Conta) as Quantidade_Vezes into #Temp_1
    FROM EmCobranca
    WHERE Movimentacao = 1  AND STATUSCONTA = 8
    GROUP BY  id_conta

    Obrigado a aos dois pela ajuda.


    Diego Almeida Barreto&lt;/strong&gt; &lt;br/&gt; &lt;em&gt;System Analyst / Software Developer&lt;/em&gt; &lt;br/&gt; &lt;img &lt;/p&gt; &lt;/div&gt;

    quarta-feira, 24 de agosto de 2016 18:19