Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hola tal como dice el título de la discusión necesito obtener el último registro de una tabla.
Tengo una tabla "CHEQUES", que tiene los datos de los valores en cheques que recibe la empresa:
id_valor
numero_cheque
cliente
importe
Lo que necesito es obtener el último numero_cheque de cada cliente.
utilizando peek(numero_cheque, -1 , 'CHEQUES') me trae solamente el último numero_cheque que se registró en la tabla, es decir no me entrega el dato que necesito.
Ejemplo:
Con peek(numero_cheque, -1 , 'CHEQUES') ) as ultimo_cheque
ultimo_cheque = 24
Lo que necesito:
para Alfonso Prat gay, ultimo_cheque=126
para Mauricio Pinola, ultimo_cheque=19
para Lioneol Sponton, ultimo_cheque=24
para Hernesto Fasta, ultimo_cheque=24
¿Cómo sabes cuál es el último registro por cliente? ¿Esto lo quieres hacer desde el Script o en la interfaz?
Saludos
Hola Alejandro, si la tabla tiene campo fecha de la recepción de cada cheque y el id-valor es único y ascendente. Quisiera resolverlo en el script porque me parece mas flexible al momento de aplicarlo y lo voy a usar mucho. Gracias.
OK, suponiendo entonces que los registros que quieres son siempre los últimos de la tabla, considero que se puede utilizar id_valor para esto, prueba con lo siguiente:
NoConcatenate
Ultimos:
LOAD
LastValue(id_valor),
cliente,
LastValue(numero_cheque) as ultimo_cheque,
LastValue(importe) as importe
Resident CHEQUES
Group by cliente;
Saludos
Si lo quieres hacer en el script en el momento de la lectura, podrias colocar un flag a cada registro.
Load Campo1,
Campo2
...
If(NoCliente<>previous(NoCliente) And RowNo()>1,1,0) as Flag_UltReg
From tabla.qvd
order by NoCliente;
Cuando haces el order by garantizas que los registros seran leidos en el orden del cliente, la pregunta basicamente lo que hace es comprar con el ultimo registro leido y le asigna un flag. Con este flag puedes leer la tabla de nuevo o procesarlo directamente en el diseno.
puedes usar peek, pero sin el -1 y ordenandolo el numero de cheque de manera descendente
load
*,
if(peek(cliente) <> cliente,numero_cheque,peek(ultimo_cheque)) as ultimo_cheque
resident tabla
order by cliente,numero_cheque desc;
Si el ID es único y ascendente como mencionas lo haría de la siguiente manera
KeyLast:
LOAD
Max(id_valor)&'-'&cliente as KeyUltimoCheque
From Tabla1
group by cliente;
UltimoCheque:
LOAD
id_valor,
cliente,
numero_cheque,
importe
From Tabla1
where exists(KeyUltimoCheque,id_valor&'-'&cliente);
drop table KeyLast;