Usuário com melhor resposta
Como identificar os ultimos registo

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
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 FernandesMCP, 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
-
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
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 FernandesMCP, 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
-
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