Lo debes estar implementando mal
Código SQL:
Ver originalCREATE TABLE tabla(tarjeta INTEGER,hora TIMESTAMP,saldo INTEGER);
INSERT INTO tabla VALUES(1,to_timestamp('01-01-2013 12:15:30','DD-MM-YYYY HH24:MI'),100);
INSERT INTO tabla VALUES(1,to_timestamp('02-02-2013 13:12:20','DD-MM-YYYY HH24:MI'),90);
INSERT INTO tabla VALUES(1,to_timestamp('05-02-2013 10:14:50','DD-MM-YYYY HH24:MI'),80);
INSERT INTO tabla VALUES(2,to_timestamp('03-01-2013 14:10:40','DD-MM-YYYY HH24:MI'),110);
INSERT INTO tabla VALUES(2,to_timestamp('05-01-2013 23:34:55','DD-MM-YYYY HH24:MI'),100);
INSERT INTO tabla VALUES(2,to_timestamp('09-01-2013 21:23:34','DD-MM-YYYY HH24:MI'),90);
INSERT INTO tabla VALUES(3,to_timestamp('01-01-2013 12:20:40','DD-MM-YYYY HH24:MI'),10);
INSERT INTO tabla VALUES(3,to_timestamp('01-01-2013 12:55:50','DD-MM-YYYY HH24:MI'),140);
INSERT INTO tabla VALUES(3,to_timestamp('01-01-2013 13:10:50','DD-MM-YYYY HH24:MI'),130);
SELECT *FROM tabla;
*tarjeta | * * * *hora * * * * | saldo
---------+---------------------+-------
* * * *1 | 2013-01-01 12:15:00 | * 100
* * * *1 | 2013-02-02 13:12:00 | * *90
* * * *1 | 2013-02-05 10:14:00 | * *80
* * * *2 | 2013-01-03 14:10:00 | * 110
* * * *2 | 2013-01-05 23:34:00 | * 100
* * * *2 | 2013-01-09 21:23:00 | * *90
* * * *3 | 2013-01-01 12:20:00 | * *10
* * * *3 | 2013-01-01 12:55:00 | * 140
* * * *3 | 2013-01-01 13:10:00 | * 130
(9 filas)
SELECT t1.tarjeta,t1.hora,t1.saldo
FROM tabla t1
INNER JOIN
(
SELECT tarjeta,MAX(hora) AS hora
FROM tabla
GROUP BY tarjeta
) AS t2
ON t1.tarjeta=t2.tarjeta AND t1.hora=t2.hora;
tarjeta | hora | saldo
---------+---------------------+-------
1 | 2013-02-05 10:14:00 | 80
2 | 2013-01-09 21:23:00 | 90
3 | 2013-01-01 13:10:00 | 130
(3 filas)
No es lo que buscas?