Sobre um Select

Firebird

26/10/2005

Tenho a Taleba ESTOQUE e os Atributos PRODUTO, SALDO, DATA

nesta tabela tenhos os seguintes DADOS

Pr-Sldo Data
1 - 10 - 01/01/2005
1 - 14 - 01/02/2005
1 - 15 - 01/03/2005
2 - 11 - 01/01/2005
2 - 13 - 01/02/2005
2 - 17 - 01/06/2005

Preciso fazer um Select que pegue o 3º e o 6º Registro... OU melhor o registro com a data Mais Atual

preciso que o resultado final fique assim:
1 - 15 - 01/03/2005
2 - 17 - 01/06/2005

Alguém me dá uma Luz, ou só se consegue fazer via Stored Procedure ???

[color=green:2014f71d84]Movido de Delphi para Interbase/Firebird[/color:2014f71d84]


Sistemaskrug

Sistemaskrug

Curtidas 0

Respostas

Bruno Belchior

Bruno Belchior

26/10/2005

se você precisa dos dois registros mais atuais taí:
select first 2 pr, saldo, data from Tabela
order by data desc
obs.: Firebird...


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/10/2005

qual o banco de dados?


GOSTEI 0
Sistemaskrug

Sistemaskrug

26/10/2005

Uso o Firebird ...


GOSTEI 0
Sistemaskrug

Sistemaskrug

26/10/2005

[quote:86306ee150=´Bruno Belchior´]se você precisa dos dois registros mais atuais taí:
select first 2 pr, saldo, data from Tabela
order by data desc
obs.: Firebird...[/quote:86306ee150]

Não poderá ser desta forma, pois terei mais e diversos registros...


GOSTEI 0
Bruno Belchior

Bruno Belchior

26/10/2005

Não poderá ser desta forma, pois terei mais e diversos registros...
Desculpe então, porém, explique melhor o que pretende fazer...


GOSTEI 0
Sistemaskrug

Sistemaskrug

26/10/2005

[quote:071bacb8b7=´Bruno Belchior´]
Não poderá ser desta forma, pois terei mais e diversos registros...
Desculpe então, porém, explique melhor o que pretende fazer...[/quote:071bacb8b7]

Resultado do Select atual que tenho:
Pr-Sldo Data
1 - 10 - 01/01/2005
1 - 14 - 01/02/2005
[b:071bacb8b7]1 - 15 - 01/03/2005[/b:071bacb8b7]
2 - 11 - 01/01/2005
2 - 13 - 01/02/2005
[b:071bacb8b7]2 - 17 - 01/06/2005[/b:071bacb8b7]

Preciso fazer um Select que pegue o 3º e o 6º Registro... OU melhor o registro com a data Mais Atual

preciso que o resultado final fique assim:
[b:071bacb8b7]1 - 15 - 01/03/2005[/b:071bacb8b7] ----- 3º Registro
[b:071bacb8b7]2 - 17 - 01/06/2005[/b:071bacb8b7] ----- 6º Registro

Excplicando melhor:
Preciso pegar a ultima movimentação por Data do Produto, sendo assim iria pegar o 3º e 6º Registro, conforme acima...

Obrigado...


GOSTEI 0
Motta

Motta

26/10/2005

ESTOQUE e os Atributos PRODUTO, SALDO, DATA


SELECT *
FROM    ESTOQUE E1
WHERE  (PRODUTO,E1.DATA) = (SELECT PRODUTO,MAX(DATA)
                                                FROM   ESTOQUE E2
                                                WHERE E2.PRODUTO = E1.PRODUTO
                                                GROUP BY PRODUTO) 


ALGUNS BD´S NAO SUPORTAM ESTA SINTAXE


GOSTEI 0
Sistemaskrug

Sistemaskrug

26/10/2005

ESTOQUE e os Atributos PRODUTO, SALDO, DATA

SELECT *
FROM    ESTOQUE E1
WHERE  (PRODUTO,E1.DATA) = (SELECT PRODUTO,MAX(DATA)
                                                FROM   ESTOQUE E2
                                                WHERE E2.PRODUTO = E1.PRODUTO
                                                GROUP BY PRODUTO) 
ALGUNS BD´S NAO SUPORTAM ESTA SINTAXE


É pelo que Testei no Firebird não funciona esta sintaxe...

Alguém teria um exemplo, ou pederiam me dar uma dica de como fazer isto numa Stored Procedure ???

Obrigado...


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/10/2005

ESTOQUE e os Atributos PRODUTO, SALDO, DATA

SELECT *
FROM    ESTOQUE E1
WHERE  (PRODUTO,E1.DATA) = (SELECT PRODUTO,MAX(DATA)
                            FROM   ESTOQUE E2
                            WHERE E2.PRODUTO = E1.PRODUTO
                            GROUP BY PRODUTO) 
ALGUNS BD´S NAO SUPORTAM ESTA SINTAXE


nesse caso, basta fazer:

SELECT * 
FROM    ESTOQUE E1 
WHERE  E1.DATA = (SELECT MAX(E2.DATA) 
                  FROM   ESTOQUE E2 
                  WHERE E2.PRODUTO = E1.PRODUTO)


(PRODUTO,E1.DATA) e group by não são necessários porque o where do subselect já está fazendo o filtro.


GOSTEI 0
POSTAR