Select comparando dados inseridos no dia anterior com o dia atual[RESOLVIDO]

7 respostas
zicky23

olá pessoal

gostaria de uma ajuda num select que preciso fazer no meu programa

assim:

tenho uma table chamada CONTA_RECEITA

digamos que no dia 15/03/2011 tenho cadastrado 2 receitas

no dia 16/03/2011 eu entro no sistema e ele pega essas 2 receitas e cadastra para o dia atual entao tenho no dia 16/03/2011 essas 2 receitas...

mas ai volto no dia 15/03/2011 e vinculo neste dia mais uma receita, agora tenho 3 receitas no dia 15 e 2 receitas no dia 16...

se eu voltar para o dia 16/03/2011 preciso fazer um select que me traga a receita nova cadastrada no dia 15/03/2011 para ser cadastrada no dia 16/03/2011 sem alterar as que já estão cadastradas no dia 16...

entendem??

fiz um select mas nao deu mto certo deêm uma olhada

select cr.id_conta_receita,cr.id_receita
                 from conta_receita cr 
                 where cr.id_conta_receita != (select first 1 c.id_conta_receita 
                                                            from conta_receita c 
                                                            where c.id_conta = 11 and 
                                                            c.data < '2011/03/16' 
                                                            order by c.id_conta_receita desc) 
                 and cr.id_conta = 11 and cr.data = '2011/03/16' 
                 order by cr.id_conta_receita desc

esse código acima ta me trazendo os dados iguais do 15 e 16 e qro os que estao no dia 15 e nao estao no dia 16

obrigado pessoal desde já

abração

7 Respostas

wagner_a_lima

O campo id_conta_receita é uma chave estrangeira que será igual para as receitas do dia 15 que automaticamente são cadastradas no dia 16?

zicky23

nao amigo, é a primária da table

chaves estrangeiras são a id_conta e a id_receita…

se puder me dar uma ajuda ou dica ja fico satisfeito…

abraço

wagner_a_lima

Não sei se é isso que vc precisa, mas simulei com alguns dados (que inventei em cima do que acho que entendi :smiley: ) e deu certo.

select a.* from conta_receita a
	left join (
		select * from conta_receita where data = '20110316'
	) b on a.id_receita = b.id_receita and a.id_conta = b.id_conta
where a.data < '20110316'
	and b.id_conta_receita is null

Os dados que testei foram esses:

id_conta_receita;id_receita;id_conta;data
1;1;11;"2011-03-15"
2;2;11;"2011-03-15"
3;1;11;"2011-03-16"
4;2;11;"2011-03-16"
5;3;11;"2011-03-15"
zicky23

amigo, qse isso…

id_conta_receita;id_receita;id_conta;data 1;1;11;"2011-03-15" 2;2;11;"2011-03-15" 3;1;11;"2011-03-16" 4;2;11;"2011-03-16" 5;3;11;"2011-03-15" //preciso selecionar apenas esse valor, que nao contem no dia 16

zicky23

cara, acho que consegui…

da uma olhada no código

select a.id_receita,a.data from conta_receita a LEFT JOIN (select * from conta_receita c where c.data = '2011/03/16' and c.id_conta = 11) b on a.id_receita = b.id_receita and a.id_conta = b.id_conta where a.data = (select first 1 skip 1 ccc.data from conta_receita ccc where ccc.id_conta = 11 order by ccc.id_conta_receita desc) and a.id_conta = 11 and b.id_conta_receita is null order by a.data desc

ta mostrando justamente apenas as que nao estao cadastradas no dia 16… mas sim no dia 15… bem como eu qria!!!

cara valeu mesmo…

obrigadão!!!

abraços

zicky23

moderador, pode finalizar esse topico

obrigado

drigo.angelo

zicky23, é só você editar seu primeiro post deste tópico e colocar, no título, [resolvido] na frente xD

Criado 16 de março de 2011
Ultima resposta 17 de mar. de 2011
Respostas 7
Participantes 3