Hola estoy practicando para el final y me encontre con el ejercicio del final del 19/02/2007, mucho no me convence lo que hice en el punto (a) y queria ver que opinan ustedes. De paso tambien les paso mi solución al paso (b) para que la vean.
3) Dado el siguiente modelo:
El siguiente modelo muestra las tablas correspondientes para aplicar un esquema de interes, la tabla cuenta con la fecha de inicio y terminación del porcentaje de interés diario para cada tipo de interés.
Hay que considerar que nunca se puede superponer para un mismo tipo de interés un rango de fechas.
|
Interes |
|
Tipo_interes |
|
inte_id |
|
tipr_id |
|
inte_fecha_inicio |
|
tipr_detalle |
|
inte_fecha_fin |
|
|
|
inte_tipo_interes (FK) |
|
|
|
inte_porcentaje |
|
|
Se pide:
a) Dado un rango de fechas obtenido desde variables y un tipo de interés (definidas abajo) crear un solo Quero que devuelva NO ROWS, si se puede cargar ese interés para el rango de fechas solicitado y una o varias filas si no se puede.
Resolución:
DECLARE @DESDE_FECHA SMALLDATETIME
DECLARE @DESDE_HASTA SMALLDATETIME
DECLARE @TIPO_INTERES CHAR(2)
SELECT CASE WHEN
EXISTS (SELECT 1
FROM interes i, tipo_interes ti
WHERE i.inte_tipo_interes = ti.tipr_id
AND i.inte_tipo_interes = TIPO_INTERES
AND i.inte_fecha_inicio >= DESDE_FECHA
AND i.inte_fecha_fin <= FECHA_HASTA)
THEN ‘Hay filas’ ELSE ‘Now rows’ END
b) Crear un procedimiento que dado un importe, y un rango de fechas para un tipo de interés devuelva el importe total con los intereses incluidos, aplicando los correspondientes intereses diarios hasta el momento de terminación de la fecha. Para el cálculo de intereses considerar que se tienen que tomar solo los intereses dentro del rango de fachas que se pasan como parámetros, luego aplicar el porcentaje diario hasta la fecha de finalización.
Resolución:
CREATE PROCEDURE CALCULAR_INTERES(@IMPORTE INT, @DESDE DATETIME, @HASTA DATETIME)
AS
BEGIN
SELECT @IMPORTE + SUM(@IMPORTE * i.inte_procentaje / 100) AS TOTAL
FROM interes i
WHERE i.inte_fecha_inicio >= @DESDE
AND i.inte_fecha_fin <= @HASTA
END
GO