Ver Mensaje Individual
  #6 (permalink)  
Antiguo 31/03/2015, 14:46
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Seleccionar ultimo registro de un grupo con condicion

Cita:
Iniciado por jleoalvarez Ver Mensaje
Buen día amigos, necesito su colaboración, no logro realizar una consulta y espero que me puedan ayudar.

Tengo una tabla llamada registro, en ella almaceno los datos de personas que paguen un servicio mensualmente o semestralmente, deseo mostrar al usuario los que están próximos a expirar para que el pueda avisarles y que renueven el servicio y la estructura de la tabla es la siguiente:

Tabla registro:

idregistro
personas_documento
fecha_inicio
fecha_fin
tipo
valor


el id es un valor unico y es incremental, luego esta el documento de la persona, la fecha de inicio que es cuando pago por el servicio y la fecha final es el dia que vence esa suscripcion, el tipo es si es mensual o semestral y el valor es lo que pago por ese servicio.

Aqui viene mi problema

Resulta que he logrado mostrar los resgistros que se venceran dentro de 3 o menos dias teniendo encuenta la fecha actual de la siguiente manera:

Código SQL:
Ver original
  1. SELECT*FROM registro WHERE datediff(fecha_fin,variable_fecha_actua)<=3

el resultado son los registros en los que su fecha final sea menor o igual a 3 dias y mostrara al usuario esa informacion.

Ahora teniendo en cuenta esto, el usuario le comunicara a la persona y ella decidirá renovar su suscripción de manera que la fecha inicial será la fecha final y la nueva fecha final será dentro de uno o seis meses segun sea el caso.
El registro anterior seria el siguiente:

idregistro | personas_documento | fecha_inicio | fecha_fin | tipo | valor |
1 | 55555 | 2015-03-01| 2015-04-01 | Mensual | 30000|

El nuevo registro quedaría asi:

idregistro | personas_documento | fecha_inicio | fecha_fin | tipo | valor |
2 | 55555 | 2015-04-01| 2015-05-01 | Mensual | 30000|
De manera que tenemos dos registros de a misma persona, pero si realizo de nuevo la consulta:
Código SQL:
Ver original
  1. SELECT*FROM registro WHERE datediff(fecha_fin,variable_fecha_actua)<=3
Me mostrará que el registro va a expirar porque claramente cumple con la condicion del where el primer registro.
Lo que quiero es que al renovar la suscripción deje de mostrarme el registro anterior y me tome el registro mas nuevo, teniendo en cuanta que habrán muchas personas registradas en el sistema si hace esto ya no me mostrará que el registro va a expirar sino que está al día.
Algunas nociones que tengo son seleccionar el idregistro mayor de cada persona y realizar la condición pero no se como hacerlo porque no tengo idea realmente
Tu modelo de datos no permite la exclusión que buscas obtener. Necesita de un campo de estado o de baja para aquellso registros que ya han sido cancelados.
Lo usual en esos casos es agregar un campo de fecha de cancelación, que se determine como nulable (pueda contener nulos) por default. De ese modo ese campo sólo se lleanrá al cancelar o renovar, permitiendo una exclusión con condicion IS NOT NULL sobre ese campo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)