GARANTIR DESCONTO

Fórum Select para pegar a maior data do dia anterior ! #392989

23/12/2010

0

Olá amigos do fórum!!

Bem minha gente , estou com uma dúvida aqui que talvez para os senhores, seja uma coisa simples:
Tenho uma tabela chamada "Comissoes", com a seguinte estrutura e registros:

Id | Data            | CodVendedor | Historico                                             | ValorLiq | Saldo
1   | 16.12.2010 | 1                      | MARCOS PEREIRA RODRIGUES             | 10,00      | 10,00
1   | 16.12.2010 | 1                      | DEBORA REGINA DA SILVA                   |   5,00      | 15,00
1   | 16.12.2010 | 1                      | TRANSPORTE E LOGISTICA T G P LTDA | 20,00      | 35,00
1   | 16.12.2010 | 1                      | ADRIANO LIMA                                     |   2,00      | 37,00
1   | 17.12.2010 | 1                      | RETIRADA EM DINHEIRO COMISSÃO     | 37,00     |   0,00
1   | 17.12.2010 | 1                      | RETIFICADORA BRASIL LTDA                |    5,80     |   5,80
1   | 20.12.2010 | 1                      | ANDREIA SILVA                                    |  12,50     | 18,30
1   | 20.12.2010 | 1                      | RETIRADA EM DINHEIRO COMISSÃO    |  18,30     |   0,00

O que eu preciso fazer é o seguinte, tenho que fazer um select que me retorne em 2 colunas (Saldo_Anterior e Saldo_Atual) a maior data do dia anterior do parametro Data_Inicial e maior data do último dia informado em Data_Final. Os parametros que estou passando são estes:  :CodVendedor , :Data_Inicial e :Data_Final. No exemplo acima, se eu colocar Vendedor = 1, Data_Inicial = 16/12/2010 e Data_Final = 23/12/2010 ele teria que me trazer:

 SALDO_ANTERIOR | SALDO_ATUAL
            37,00         |       0,00

não sei se deu pra entender!
estou usando o Firebird 2.1.3
Por favor, quem pudesse me ajudar ficaria muito grato!!
Obrigado!
ah, antes que eu me esqueça, um feliz natal a todos e um próspero ano novo!
Itamar Monteiro

Itamar Monteiro

Responder

Posts

29/12/2010

Ricardo Araujo

boa noite,     acho que esta solução ira ajuda vc,   fiz um exemplo e bateu certinho com que vc esta precisando código da uma olhada.     SELECT c.valorliq, c.saldo  FROM  COMISSOES C
where c.codvendedor = '1'
and   c.data between :datai and :dataf
and   c.valorliq = (select max(c.valorliq) from comissoes c)
Responder

Gostei + 0

30/12/2010

Itamar Monteiro

Olá Ricardo, tudo blz?
Obrigado pela dica vou testar, e te dou um retorno , obrigado!

Responder

Gostei + 0

31/12/2010

Emerson Nascimento

o exemplo que você passou está correto? o resultado deveria ser aquele mesmo?

outra coisa: todos os ID's têm o mesmo conteúdo?


Responder

Gostei + 0

02/01/2011

Itamar Monteiro

Olá Emerson, tudo bem?
Sim, o resultado deve ser aquele mesmo, é o que pessoa lá... trabalha de uma forma diferente no diz respeito a saldo anterior, é um programinha de comissões, mas às avessas... rsrsrs
Sim os ID´s tem o mesmo conteúdo... são do tipo Integer.. (PK)

Responder

Gostei + 0

02/01/2011

Itamar Monteiro

Pessoal, consegui fazer!!
Com a dica do amigo Ricardo, fiz algumas mudanças, batendo a cabeça,  mas consegui....
O que eu precisava era que a partir de um  período de datas informado, me retornasse o saldo da maior data, mas que fosse menor do que a data inicial (saldo anterior) e fosse igual a maior data do parametro datafinal. Meio confuso o negócio, ne?
Porque eu posso ter vários lançamentos para o mesmo dia, para o mesmo vendedor por isso é que tenho que pegar a maior data de "Data Final" e a maior data de "Data Inicial" -1 para eu saber , quanto do vendedor tinha antes da data informada em "Data Inicial". O código SQL que usei foi esse:
  SELECT SALDO AS SALDO_ANTERIOR,
(SELECT SALDO AS SALDO_ATUAL FROM COMISSOES WHERE CODVENDEDOR = :VENDEDOR AND DATA BETWEEN (SELECT MAX(DATA)
  FROM COMISSOES WHERE CODVENDEDOR = :VENDEDOR AND DATA <= :DATAFINAL) AND :DATAFINAL ORDER BY ID DESC ROWS 1)
  FROM COMISSOES 
     WHERE CODVENDEDOR = :SOCIO AND
     DATA BETWEEN (SELECT MAX(DATA) FROM SALDOS WHERE CODVENDEDOR = :VENDEDOR AND DATA < :DATA)    AND  :DATA -1
ORDER BY ID DESC ROWS 1


Com este código, ele me traz exatamente o que eu preciso. No meu caso, funciona 100%.
Obrigado pela ajuda!!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar