Cuantos Registros hay repetidos


([N3] blanyi) #1

Buenos días.
Quiero saber cuál es la manera de determinar cuál es el número de veces que más se repite un registro dentro de una lista.
Me explico mejor: tengo una lista con los créditos entregados a cada cliente así:
Cliente Producto Valor
FULANO Crédito Simple 10
FULANO Crédito Computador 5
FULANO Microcrédito 3
PEDRO Crédito Computador 5
PEDRO Crédito Vehiculo 50

Y así la lista contendría más clientes con cada uno de sus registros.
Lo que deseo saber y si hay alguna función o alguna sentencia que me permita saber cuántas veces se repite un cliente dentro de la lista, para el caso del ejemplo debería arrojarme 3 que es el número de registro que tiene el cliente FULANO.

Gracias por vuestra ayuda.

YIMY MORA ACONCHA


([N1] fjvila) #2

Hola Yimy:

Dentro de la lista puedes usar la instrucción “Multipartir lista” por el campo cliente. Esta instrucción te genera una lista independiente por cada cliente que encuentre. Una vez que hayas multipartido la lista puedes usar la variable SysListSize para saber los registro que tiene la lista.

Un saludo


([N4] mperez) #3

Hola Blanyi.

Primero dejarte claro que la respuesta de Vila es totalmente correcta.

Pero igual la solución a tu necesidad es la siguiente, si es algo que va a ser de uso habitual en tu aplicación, el camino mas normal es el siguiente.

Crea un campo en Clientes que sea Numero de Créditos.
Crea en Creditos una actualización sobre ese campo Número de créditos y ya lo tienes solucionado.
Además incluso podrías condicionar esa actualización en función del tipo, etc.
Creo que en tu caso es la forma correcta de hacerlo, si te interesa saber el numero de créditos de cada cliente, crea un campo en la base de datos que lo controle y lo tengas disponible en todo momento.

En la actualización, puedes progrmar con condiciones, incluso que lo acumule solo si esta vigente el crédito.

Es decir puedes en cada Cliente poner un campo que sea Creditos Totales Concedidos y otro que sea Creditos en Vigor y que se actualicen de forma automatica.

O incluso hacer lo mismo en la ficha de Vendedor del Credito, etc.

Eso es pensar en Velneo, pensar en que la base de datos te lo solucione.


([N3] blanyi) #4

Ok, muchas gracias a los dos por sus amables respuestas.
Lo que me dice Miguel creo que es lo mas acertado, pero en otros casos estoy seguro que aplicaré la respuesta de fjvila pues en muchos casos lo que he hecho es multipartir y luego leer las lista e ir contando en una variable el numero de registro, así que me sirve mucho tu respueta fjvila, me ayuda a hacer ahora mis procesos mas cortos y rápidos.

YIMY MORA ACONCHA


([N3] blanyi) #5

Hola nuevamente yo por aquí.
Aplicando lo comentado por fjvila me surge una duda.
¿Como hago para revisar una lista multipartida?
Me explico, tengo lo siguiente

  • Interfaz:Procesar (Lista, Todas)
  • Ordenar Lista (id_cliente)
  • Multipartir Lista (id_cliente)
    • Aquí va el subproceso del multipartir

En mi caso particular lo que quiero saber cual cliente tiene más registros repetidos y lo que se me ha ocurrido es tener en una variable local (llamada NMAYOR) el número mayor encontrado comparando el mayor actual con el SysListSize que genera cada multipartir.

En resumen la inquietud es:
¿Como armo el ciclo para ir comparando la variable local con el SysListSize de cada lista independiente?
Tal vez yo no he entendido bien o no he sabido buscar pero me parece que de Multipartir falta mayor documentación, ejemplos con los cuales guiarse.

Gracias una vez más.

YIMY MORA ACONCHA


([N1] Pepeto) #6

Puedes crear una tabla en memoria y guardar un registro con cada cliente y su numero de registros.
Al final, el resultado es similar al que te propone @mperez

un saludo
José Luis
http://www.ascsl.com


([N4] mperez) #7

Hola Blanyi.

No se exactamente en que consiste tu aplicación y es por eso que no quiero mojarme del todo y es solo una idea.

Pero si tu aplicación de gestion, es de prestamos, creditos y microcreditos. Creo que será fundamental en toda ella, para la necesidad que tienes en este momento y para las que te surjan en el futuro, tener siempre disponible en todos los sitios el numero de creditos, microcreditos, polizas, etc de cada cliente.

Por tanto ese campo, lo debes tener en la tabla de clientes y que siempre lo tengas disponible, para otros calculos o estadisticas por paises, ciudades, vendedores,etc.

Por tanto esta claro, un campo Creditos en Clientes y que se actualice solo.

Olvidate del Multipartir lista y del SysListSize , eso te sera útil y efectivamente te da lo que quieres, pero no es el camino para hacerlo todo facil, si se trata de lo que intuyo y te he expuesto.

De esa manera tienes facil en cualquier momento saber el que mas polizas tiene o los que tienen más de dos, o los que tienen solo una y utilizable desde todos los puntos.

Por ejemplo imagina que la tarifa o un descuento, depende de que ya tenga alguna poliza el cliente o del numeor de polizas que tiene, puedes hacer un calculo inicial de otro campo, basandote en este.

Incluso iría mas halla, no solo te hace falta un campo actualizado automaticamente en la tabla de clientes que te diga el numero de prestamos, sino que probablemente otros como el importe Total prestado , entre todas ellas.

Todo lo que puedas hacer en Base de Datos, Hazlo alli, te ahorrará mucho trabajo después.


([N3] blanyi) #8

Miguel perfectamente entendido.
No quería meterme a crear un nuevo campo y esto de las actualizaciones, pero de acuerdo con tu explicación tienes mucha razón, definitivamente lo hare conforme tu lo planteas.

Sin embargo, y para otro caso en el que tal vez se requiera, me queda la duda de como obtener los datos de cada uno de los grupos que se forman en un multipartir lista.

Dios los bendiga.

YIMY MORA ACONCHA