Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
walterlh
Creator II
Creator II

ULTIMO REGISTRO

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:

Imagen1.png

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

6 Replies
alexdataiq
Partner - Creator III
Partner - Creator III

¿Cómo sabes cuál es el último registro por cliente? ¿Esto lo quieres hacer desde el Script o en la interfaz?

Saludos

walterlh
Creator II
Creator II
Author

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.

alexdataiq
Partner - Creator III
Partner - Creator III

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

jolivares
Specialist
Specialist

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.

ramoncova06
Specialist III
Specialist III

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;

Anonymous
Not applicable

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;