Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Realizar Consulta para sacar el primer elemento distinto de una lista. (https://www.clubdelphi.com/foros/showthread.php?t=78333)

Adrian Murua 10-04-2012 09:40:14

Realizar Consulta para sacar el primer elemento distinto de una lista.
 
Estimados Amigos.

Tengo dos tablas mysql. Afiliados y CuotasPrestamos, entre otras, pertenecientes a un sistema administrativo de una Mutual, la cual se dedica a prestamos personales, cuya devolucion es en cuotas.

En la tabla afiliados obviamente la informacion del afiliados(id, apellido, nombre, dirección ...,etc.), la tabla CuotasPrestamos la informacion de las cuotas del prestamo( id, numero, importe vencimiento,...,etc).

Código SQL [-]
Afiliados                               
--------                                 
id   int;   //clave primaria                                     
apellido varchar(50);                  
nombre varchar(50);                   
.....                                         
                                             
                                          
CuotasPrestamos
-----------------
id int;    //clave primaria
numero int;  // numero de cuota del plan
importe decimal(10,3); 
vencimiento  date; 
pagada int default 0;  // si esta pagada tiene un 1.
planes_id int;   // clave foranea (tabla planes)
afiliados_id int; // clave foranea (tabla afiliados)

Estas tablas estan relacionadas por el campo id - afiliados_id.
La tabla CuotasPrestamos, dependiendo del plan elegido ( 3,6,12, etc), va a tener, segun el caso, 3-6-12 filas(cuotas), por cada cliente que saco un prestamo.

En un tiempo determinado, puedo tener en las tablas lo siguiente:

Afiliados
--------
1 ; Perez ; Juan ; ....; // separe los campos con ;
2 ; AAAA ; BBBBB; .. ;


CuotasPrestamos
----------------

1 ; 1; 18.33; '2012-01-10'; 1; 6; 1; //plan 6 cuotas afiliados 1.
2 ; 2; 18.33; '2012-02-10'; 1; 6; 1;
3 ; 3; 18.33; '2012-03-10'; 0; 6; 1;
4 ; 4; 18.33; '2012-04-10'; 0; 6; 1;
5 ; 5; 18.33; '2012-05-10'; 0; 6; 1;
6 ; 6; 18.33; '2012-06-10'; 0; 6; 1;

7 ; 1; 18.33; '2012-01-10'; 0; 3; 2; //plan 3 cuotas afiliados 2.
8 ; 2; 18.33; '2012-02-10'; 0; 3; 2;
9 ; 3; 18.33; '2012-03-10'; 0; 3; 2;


Cual es mi problema :

1. Debo sacar informacion de la primera cuota impaga del afiliado, ( la cuota impaga es la que tiene un cero en el campo pagada), pero que no me muestre las adeudadas que no estan vencidas todavia, la consulta debe devolver un solo registro. Este registro debe ser actualizado con los datos de un pago realizado por el cliente, por esto debe ser unico el registro devuelto.

2. (Esta es una consulta de logica). Como se trata la situacion de que el afiliados tiene 2 o mas cuotas atrazadas, tanto para actualizar los pagos, como para el tratamiento ya como deudor moroso.


desde ya muchas gracias.

rgstuamigo 10-04-2012 16:00:30

Cita:

Empezado por Adrian Murua (Mensaje 429654)

1. Debo sacar informacion de la primera cuota impaga del afiliado, ( la cuota impaga es la que tiene un cero en el campo pagada), pero que no me muestre las adeudadas que no estan vencidas todavia, la consulta debe devolver un solo registro. Este registro debe ser actualizado con los datos de un pago realizado por el cliente, por esto debe ser unico el registro devuelto.

Código SQL [-]
select * from CuotasPrestamos where afiliados_id=@IDAfiliado and pagada=0 and vencimiento < CURDATE() Order By vencimiento Limit 1;
@IDAfiliado= el ID del afiliado a buscar.
Cita:

Empezado por Adrian Murua (Mensaje 429654)
2. (Esta es una consulta de logica). Como se trata la situacion de que el afiliados tiene 2 o mas cuotas atrazadas, tanto para actualizar los pagos, como para el tratamiento ya como deudor moroso.
...

No sé si es lo que buscas pero para saber los clientes con 2 o mas cuotas atrazadas se pude hacer lo siguiente consulta SQL:
Código SQL [-]
Select ConcatWS(' ',a.Nombre,a.Apellido) as Cliente ,count(c.pagada) as Cuotas_Retrasadas
From Afiliados a Inner Join CuotasPrestamos c On a.Id=c.afiliados_id
Where c.Pagada=0 and c.vencimiento < CURDATE()
Group By Cliente Having count(c.pagada)>=2
Pruebalo..ya que lo he hecho a mano sin probarlo...:rolleyes:
Saludos...:)

Adrian Murua 11-04-2012 06:06:02

Gracias, rgstuamigo, por tu respuesta , era exactamente lo que estaba buscando, las dos consultas funcionan bien , ahora una pregunta , la segunda consulta, con algunos retoques, mas el "count", no seria una generalizacion de la primera consulta. Gracias.

rgstuamigo 11-04-2012 16:44:46

Cita:

Empezado por Adrian Murua (Mensaje 429741)
... ahora una pregunta , la segunda consulta, con algunos retoques, mas el "count", no seria una generalizacion de la primera consulta.

Pues si tú lo ves de esa forma..pues si...pero ten en cuenta que la segunda puede devolverte como resultado muchas tuplas(filas), en cambio la primera solo te devolverá una o niguna segun sea el caso, ya que esta delimitada por la clausula LIMIT, ademas existe cierto criterio de seleccion(WHERE ,GROUP BY, HAVING) que diferencia la una de la otra.;)
Salludos...:)


La franja horaria es GMT +2. Ahora son las 12:34:55.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi