none
Como identificar os ultimos registo RRS feed

  • Pergunta

  • Caros colaboradores

    Sou novissimo nestas andanças de foruns, no entanto gostaria desde já começar por felicitar todos aqueles que colaboram com quem memos sabe.

    A minha duvida é como selecionar um registo utilizando o Sql(vb6)

    tenho 2 tabelas, uma tab_socios e outra tab_pagamentos

    na tab_socios tenho os campos n_socio, nome, morada e situacao na tab_pagamentos tenho n_socio,data_pagamento e valor

    na tab_pagamentos guardo todos os pagamentos, mas existe socios que ainda não pagaram, assim quando tenho necessidade de enviar uma carta distinta aos socios que pagaram e outra para quem nao pagaram nao sei como fazer

    ex:

    tab_socios

    1 - pedro - rua - vivo

    2 - joao - rua - FALECIDO

    3 - rui - estrada - vivo

    4 - manuel - rua - vivo

    tab_pagamentos

    1 - 1-2-2010 - 1€

    2 - 1-3-2010 - 2 €

    1 - 2-2-2010 - 2€

    4 - 1-4-2010 - 1€

    ATENCAO: não tenho registo do socio 3 e o socio 2 FALECEU. O socio 1 embora tenha pago duas vezes só preciso do ultimo registo

    agradeco a vossa atenção

     

     

    quinta-feira, 3 de março de 2011 15:19

Respostas

  • declare @tab_socios table (n_socio int, nome varchar(30), morada varchar(10), situacao varchar(10))
    declare @tab_pagamentos table(n_socio int,data_pagamento datetime, valor money)
    insert into @tab_socios values (1,'pedro','rua','vivo')
    insert into @tab_socios values (2,'joao','rua','FALECIDO')
    insert into @tab_socios values (3,'rui','estrada','vivo')
    insert into @tab_socios values (4,'manuel','rua','vivo')
    
    insert into @tab_pagamentos values (1,'20100201',1)
    insert into @tab_pagamentos values (2,'20100301',2)
    insert into @tab_pagamentos values (1,'20100202',2)
    insert into @tab_pagamentos values (4,'20100401',1)
    
    --clientes que nao pagaram
    select n_socio, nome from @tab_socios where situacao='vivo' and n_socio not in (select n_socio from @tab_pagamentos)
    
    --clientes que pagaram
    select a.n_socio, nome, max(b.data_pagamento) as dtPagamento 
    from @tab_socios a inner join @tab_pagamentos b on a.n_socio=b.n_socio 
    where situacao='vivo'
    Group by a.n_socio, nome
    

    pesoangi,

    Segue um script básico para sua atividade...

     

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Marcado como Resposta Richard Juhasz segunda-feira, 28 de março de 2011 19:56
    quinta-feira, 3 de março de 2011 17:45
  •  

    Aproveitando a estrutura criada pelo Marcelo, caso voê precise dos valores pagos e de todos od registros em uma unica tabela, segue um exemplo:

    --clientes que nao pagaram
    select n_socio, 
             nome,
             null As valor,
             null as dtPagamento,
             'não pagou' As Status
    From @tab_socios
    where n_socio not in (select n_socio from @tab_pagamentos)
    Union
    --clientes que pagaram
    Select a.n_socio,
              nome,
              valor,
              Pagamento.data_pagamento as dtPagamento,
              'pagou'
    From @tab_socios a
    Inner join @tab_pagamentos Pagamento
       on a.n_socio=Pagamento.n_socio
    Inner Join (Select  Max(data_pagamento) As data_pagamento,
                               n_socio
                     From @tab_pagamentos
                     Group by n_socio) As UltimoSalario
       on  UltimoSalario.data_pagamento = Pagamento.data_pagamento
       And UltimoSalario.n_socio = Pagamento.n_socio
    Where situacao='vivo'

    Espero que ajude!

     

    • Marcado como Resposta Richard Juhasz segunda-feira, 28 de março de 2011 19:56
    sexta-feira, 4 de março de 2011 02:02

Todas as Respostas

  • declare @tab_socios table (n_socio int, nome varchar(30), morada varchar(10), situacao varchar(10))
    declare @tab_pagamentos table(n_socio int,data_pagamento datetime, valor money)
    insert into @tab_socios values (1,'pedro','rua','vivo')
    insert into @tab_socios values (2,'joao','rua','FALECIDO')
    insert into @tab_socios values (3,'rui','estrada','vivo')
    insert into @tab_socios values (4,'manuel','rua','vivo')
    
    insert into @tab_pagamentos values (1,'20100201',1)
    insert into @tab_pagamentos values (2,'20100301',2)
    insert into @tab_pagamentos values (1,'20100202',2)
    insert into @tab_pagamentos values (4,'20100401',1)
    
    --clientes que nao pagaram
    select n_socio, nome from @tab_socios where situacao='vivo' and n_socio not in (select n_socio from @tab_pagamentos)
    
    --clientes que pagaram
    select a.n_socio, nome, max(b.data_pagamento) as dtPagamento 
    from @tab_socios a inner join @tab_pagamentos b on a.n_socio=b.n_socio 
    where situacao='vivo'
    Group by a.n_socio, nome
    

    pesoangi,

    Segue um script básico para sua atividade...

     

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Marcado como Resposta Richard Juhasz segunda-feira, 28 de março de 2011 19:56
    quinta-feira, 3 de março de 2011 17:45
  •  

    Aproveitando a estrutura criada pelo Marcelo, caso voê precise dos valores pagos e de todos od registros em uma unica tabela, segue um exemplo:

    --clientes que nao pagaram
    select n_socio, 
             nome,
             null As valor,
             null as dtPagamento,
             'não pagou' As Status
    From @tab_socios
    where n_socio not in (select n_socio from @tab_pagamentos)
    Union
    --clientes que pagaram
    Select a.n_socio,
              nome,
              valor,
              Pagamento.data_pagamento as dtPagamento,
              'pagou'
    From @tab_socios a
    Inner join @tab_pagamentos Pagamento
       on a.n_socio=Pagamento.n_socio
    Inner Join (Select  Max(data_pagamento) As data_pagamento,
                               n_socio
                     From @tab_pagamentos
                     Group by n_socio) As UltimoSalario
       on  UltimoSalario.data_pagamento = Pagamento.data_pagamento
       And UltimoSalario.n_socio = Pagamento.n_socio
    Where situacao='vivo'

    Espero que ajude!

     

    • Marcado como Resposta Richard Juhasz segunda-feira, 28 de março de 2011 19:56
    sexta-feira, 4 de março de 2011 02:02