Como fazer um SELECT pra pegar o valor da última data cadastrada por CONTA

como fazer um select :
tenho uma table VALOR_ATUAL
la cadastro por dia o valor atual das contas por ID_CONTA
tem mais de 100 contas e nem todas as contas sao atualizadas todos os dias
preciso pegar o valor atual das contas na ultima data cadastrada de cada uma entende?
tipo a conta 2040 foi atualizada dia 04/03/2011 com valor atual de 10000,00 e a conta 1713 foi atualizada hj com valor de 20000,00 como faço o select pra pega esses 2 valores?

agradeço desde agora

tenta algo assim:

select conta, max(data) from tabela group by conta

Tentando entender:

Tenho a conta x com id “01”

Ela foi alterada dia 04/03/2011 em R$10,00

Depois essa mesma conta x com id “01”

foi alterada no dia 08/03/2011 em R$15,00

?

Dentre várias possibilidades,

se você criar uma tabela “contas_atualizadas” com os mesmos campos da tabela “contas” e depois

fazer uma trigger pra amarrar na tabela “contas” para que toda vez que a tabela “contas” for atualizada,

a conta que foi atualizada seja enviada para a tabela “contas_atualizadas” e nesse mesmo trigger tenha um select para pegar somente do último mês.

Para pegar o último mês, você pode, por exemplo, pegar o dia (01/03/2011) até o dia ( 01/04/2011 - 1 ) pois nem todo mês tem 31 dias.

vou tentar explicar mostrando o banco

tenho uma tabela chamada “CONTAS” nela contém os campos “ID_CONTA”, “NUMERO_CONTA”, “NOME_CONTA”

tenho outra tabela VALOR_ATUAL que tem os campos “ID_VALOR”, “ID_CONTA”(FK), “VALOR_ATUAL”, “DATA_VALOR_ATUAL”

todos os dias “ALGUMAS” contas são atualizadas “UMA DE CADA VEZ”, ou seja, é inserido na tabela VALOR_ATUAL uma nova linha com a DATA_VALOR_ATUAL do dia que foi atualizado e o VALOR_ATUAL do dia, NÃO ALTERANDO as linhas que contém os valores dos dias anteriores, “APENAS ADD MAIS UMA LINHA”.

EX.:

Tenho Cadastrada as seguintes contas:

  • conta nº 1620, 1651 e 2040

dia 08/03/2011 eu entrei na conta 1651 e atualizei o VALOR_ATUAL para R$ 500,00

dia 09/03/2011 eu entrei apenas na conta 1620 e atualizei o VALOR_ATUAL para R$ 1000,00

e a conta 2040 permaneceu com o valor de R$ 0,00

preciso fazer um select tipo assim:

CONTA | VALOR_ATUAL | DATA_VALOR_ATUAL

1651 | R$ 1000,00 | 08/03/2011
1620 | R$ 500,00 | 09/03/2011

e nao mostrar a conta que nao tem valor, ou seja, igual a zero.

obrigado pessoal…

A resposta do edu_merckx já dá quase o que você quer.

Você quer o valor da conta na data mais atual que existe…

Esse problema é comum… você quer o o valor no max da data… não dá pra fazer direto…
O que costumo fazer é um JOIN da tabela com o max data…

Ficaria algo assim:

SELECT VA.ID_CONTA, VA.VALOR_ATUAL
FROM
  VALOR_ATUAL  VA
  INNER JOIN
  (SELECT ID_CONTA, MAX(DATA) AS MAIOR_DATA FROM VALOR_ATUAL GROUP BY ID_CONTA ) RECENTES
  ON VA.ID_CONTA = RECENTES.ID_CONTA
  AND VA.DATA = RECENTES.MAIOR_DATA

cara, deu certo :smiley:

era isso mesmo que precisava…

mto obrigado… obrigado a todos pela ajuda!!!

\o\